home *** CD-ROM | disk | FTP | other *** search
/ Moving Pixels Collection / Moving Pixels Collection.iso / st / discs / source / disc15.s < prev   
Text File  |  1985-11-18  |  84KB  |  3,567 lines

  1. xamount:    equ    1
  2. zamount:    equ    1
  3. iea:        equ    $fffa07
  4. ieb:        equ    $fffa09
  5. isra:        equ    $fffa0f
  6. ima:        equ    $fffa13
  7. tbcr:        equ    $fffa1b
  8. tbdr:        equ    $fffa21
  9. vbl_vec:    equ    $70
  10. key_vec:    equ    $118
  11. hbl_vec:    equ    $120
  12. magic:        equ    350
  13. velocity:    equ    10
  14. start:  clr.l   -(SP)           ;Go into supervisor mode
  15.         move.w  #$20,-(SP)
  16.         trap    #1
  17.         addq.l  #6,SP
  18.         move.l  D0,spv_sp
  19.     move.b    #0,$484
  20.  
  21.     move.l    #$31415926,$426    ;set reset vector valid
  22.     move.l    #myreset,$42a
  23.     move.w    #4,-(sp)
  24.     trap    #14
  25.     addq.l    #2,sp
  26.     move.w    d0,ressave
  27.  
  28.     move.w    #0,-(sp)    ;set to low res
  29.     move.l    #-1,-(sp)
  30.     move.l    #-1,-(sp)
  31.     move.w    #5,-(sp)
  32.     trap    #14
  33.     add.l    #12,sp
  34.  
  35.         jsr     mousof
  36. *    jsr    joystuff
  37.     jsr    putrout
  38.         jsr     getscrn
  39.     jsr    plotinit
  40.         jsr     linea
  41.         move.w  #10,d0
  42.         jsr     randomseed
  43. *    bsr    prestuff
  44.     lea    myvbl,a0
  45.     jsr    putvbl
  46.     move.l    a1,oldvbl1
  47.     move.w    #10,linecolor
  48.     move.l    #palette1,temppal
  49.     bsr    docolors
  50.     move.l    #filediscs,filename
  51.     bsr    loadscr
  52.     bsr    copyintoboth
  53.     bsr    maketable
  54.     move.w    #1199,mmax    ;1199
  55.     move.w    #0,mmin
  56.     move.w    #6,mmax2    ;3
  57.     move.w    #0,mmin2    ;3
  58.     move.w    #3,my
  59.     move.w    #0,mymanx
  60.     move.w    #80,mymany
  61.     move.w    #275,mymanz
  62.     move.w    #150,mx
  63. main:
  64.     addq.w    #1,fcount
  65. *    bsr    joydir
  66.     bsr    printscore
  67.     bsr    dosquare
  68.     bsr    drawsquare
  69.     bsr    drawcursor
  70.     bsr    discs
  71.     bsr    domyman
  72.     bsr    flip2
  73.     bsr    stopdisc
  74.     bsr    keyboard
  75.     bra    main
  76. *    move.w    #$0777,$ff8240
  77. *    bra    gem
  78.     
  79. stopdisc:
  80.     cmpi.w    #2,buttondat
  81.     bne    stdb
  82.     lea    mydisc1,a0
  83.     move.w    #-1,(a0)
  84.     lea    mydisc2,a0
  85.     move.w    #-1,(a0)
  86.     lea    mydisc3,a0
  87.     move.w    #-1,(a0)
  88. stdb:
  89.     rts
  90.  
  91. drawcursor:
  92.     move.w    #13,linecolor
  93.     move.l    #cursortable,a0
  94.     move.w    mx,d0
  95.     asl.w    #3,d0            ;mult by 8
  96.     move.w    (a0,d0.w),d1        ;x
  97.     move.w    2(a0,d0.w),d2        ;y
  98.     move.w    4(a0,d0.w),d3        ;z
  99.     move.w    6(a0,d0.w),d4        ;flag
  100.     move.w    d4,cursorflag
  101.     cmpi.w    #1,d4
  102.     beq    dc2
  103.     move.l    #cursordef1,a0
  104.     move.w    d1,(a0)
  105.     lea    squaredef,a1
  106.     move.w    2(a1),2(a0)
  107.     move.w    d3,4(a0)
  108.     bsr    calculator
  109.     move.l    #cursordef1,a0
  110.     move.l    8(a0),a0
  111. drawcloop1:
  112.     move.w    (a0),x1
  113.     move.w    2(a0),y1
  114.     move.w    8(a0),x2
  115.     move.w    10(a0),y2
  116.     bsr    clipit
  117.     move.w    4(a0),x1
  118.     move.w    6(a0),y1
  119.     move.w    12(a0),x2
  120.     move.w    14(a0),y2
  121.     bsr    clipit
  122.     rts
  123. dc2:
  124.     move.l    #cursordef2,a0
  125.     move.w    d1,(a0)
  126.     lea    squaredef,a1
  127.     move.w    2(a1),2(a0)
  128.     move.w    d3,4(a0)
  129.     bsr    calculator
  130.     move.l    #cursordef2,a0
  131.     move.l    8(a0),a0
  132. drawcloop2:
  133.     move.w    (a0),x1
  134.     move.w    2(a0),y1
  135.     move.w    8(a0),x2
  136.     move.w    10(a0),y2
  137.     bsr    clipit
  138.     move.w    4(a0),x1
  139.     move.w    6(a0),y1
  140.     move.w    12(a0),x2
  141.     move.w    14(a0),y2
  142.     bsr    clipit
  143.     rts
  144.  
  145. drawsquare:
  146.     move.w    #4,linecolor
  147.     lea    squaredef,a0
  148.     move.l    8(a0),a0
  149. drawsloop:
  150.     move.w    (a0),x1
  151.     move.w    2(a0),y1
  152.     move.w    4(a0),x2
  153.     move.w    6(a0),y2
  154.     bsr    clipit
  155.     move.w    4(a0),x1
  156.     move.w    6(a0),y1
  157.     move.w    8(a0),x2
  158.     move.w    10(a0),y2
  159.     bsr    clipit
  160.     move.w    12(a0),x1
  161.     move.w    14(a0),y1
  162.     move.w    (a0),x2
  163.     move.w    2(a0),y2
  164.     bsr    clipit
  165.     rts
  166.  
  167. dosquare:
  168.     lea    squaredef,a0
  169.     move.w    my,d0
  170.     lea    sqparam,a1
  171.     asl.w    #1,d0
  172.     move.w    (a1,d0.w),2(a0)
  173.     bsr    calculator
  174.     rts
  175.  
  176. sqparam:
  177.     dc.w    50,60,70,80,90,100,110
  178.  
  179.  
  180. calculator:
  181.     move.w    (a0)+,d0    ;x
  182.     move.w    (a0)+,d1    ;y
  183.     move.w    (a0)+,d2    ;z
  184.     move.w    (a0)+,d7    ;number of points
  185.     subq.w    #1,d7
  186.     move.l    (a0)+,a6    ;ad of place to points calc'd points
  187. calcloop:
  188.     moveq    #0,d3
  189.     move.w    (a0)+,d3    ;get x
  190.     add.w    d0,d3
  191.     muls    #magic,d3    ;persp
  192.     move.w    2(a0),d4    ;get z
  193.     add.w    d2,d4
  194.     divs    d4,d3
  195.     add.w    #159,d3        ;adjust for centre of screen
  196.     move.w    d3,(a6)+    ;put in place
  197.  
  198.     moveq    #0,d3        ;get y
  199.     move.w    (a0)+,d3
  200.     add.w    d1,d3        ;add y offs        
  201.     muls    #magic,d3
  202.     divs    d4,d3
  203.     add.w    #20,d3        ;adjust for centre
  204.     move.w    d3,(a6)+
  205.     addq.l    #2,a0
  206.     dbf    d7,calcloop
  207.     rts
  208. *************************************************
  209. *    Move me about                *
  210. *************************************************
  211. domyman:
  212.     move.w    mymanx,d0
  213.     sub.w    #10,d0
  214.     move.w    mymany,d1
  215.     sub.w    #30,d1
  216.     move.w    mymanz,d2
  217.     bsr    a3dmath
  218.     lea    mymansp,a0
  219.     move.w    d6,(a0)
  220.     move.w    d7,2(a0)
  221.     bra    putsprite
  222.     rts
  223.  
  224. *************************************************
  225. *    routine to bounce discs            *
  226. *************************************************
  227. discs:
  228.     cmpi.w    #1,buttondat    ;is there a new shot
  229.     bne    movediscs    ;if not just move the current dsc
  230.     tst.w    discdelaycount
  231.     bpl    movediscs
  232.     move.w    #2,discdelaycount
  233.     move.w    #0,buttondat
  234.     lea    mydisc1,a0    ;otherwise find inactive one
  235.     tst.w    (a0)
  236.     bpl    discs2        ;if active go to 2
  237.     move.w    #1,(a0)
  238.     move.w    #0,32(a0)    ;middle flag
  239.     move.w    #0,34(a0)    ;middle flag
  240.     move.w    #0,36(a0)    ;middle flag
  241.     move.w    #0,38(a0)    ;middle flag
  242.     lea    myshad1,a1
  243.     bsr    getcursor    ;get x,y,z of cursor do math
  244.     bra    movediscs
  245. discs2:
  246.     lea    mydisc2,a0    ;otherwise find inactive one
  247.     tst.w    (a0)
  248.     bpl    discs3        ;if active go to 2
  249.     move.w    #1,(a0)
  250.     move.w    #0,32(a0)    ;middle flag
  251.     move.w    #0,34(a0)    ;middle flag
  252.     move.w    #0,36(a0)    ;middle flag
  253.     move.w    #0,38(a0)    ;middle flag
  254.     lea    myshad2,a1
  255.     bsr    getcursor    ;get x,y,z of cursor do math
  256.     bra    movediscs
  257. discs3:
  258.     lea    mydisc3,a0    ;otherwise find inactive one
  259.     tst.w    (a0)
  260.     bpl    movediscs        ;if active go to 2
  261.     move.w    #1,(a0)
  262.     move.w    #0,32(a0)    ;middle flag
  263.     move.w    #0,34(a0)    ;middle flag
  264.     move.w    #0,36(a0)    ;middle flag
  265.     move.w    #0,38(a0)    ;middle flag
  266.     lea    myshad3,a1
  267.     bsr    getcursor    ;get x,y,z of cursor do math
  268. movediscs:
  269.     lea    mydisc1,a0
  270.     tst.w    (a0)
  271.     bmi    md2
  272.     lea    myshad1,a1
  273.     bsr    discmath
  274.     move.w    2(a1),d0
  275.     move.w    4(a1),d1
  276.     move.w    6(a1),d2
  277.     bsr    a3dmath
  278.     move.w    d6,d2
  279.     move.w    d7,d1
  280.     cmpi.w    #195,d1
  281.     bge    skmd1
  282.     bsr    doitb
  283. skmd1:    lea    mydisc1,a0
  284.     move.w    2(a0),d0
  285.     move.w    4(a0),d1
  286.     move.w    6(a0),d2
  287.     bsr    a3dmath
  288.     move.w    d6,d2
  289.     move.w    d7,d1
  290.     bsr    doit
  291. md2:
  292.     lea    mydisc2,a0
  293.     tst.w    (a0)
  294.     bmi    md3
  295.     lea    myshad2,a1
  296.     bsr    discmath
  297.     move.w    2(a1),d0
  298.     move.w    4(a1),d1
  299.     move.w    6(a1),d2
  300.     bsr    a3dmath
  301.     move.w    d6,d2
  302.     move.w    d7,d1
  303.     cmpi.w    #195,d1
  304.     bge    skmd2
  305.     bsr    doitb
  306. skmd2:    lea    mydisc2,a0
  307.     move.w    2(a0),d0
  308.     move.w    4(a0),d1
  309.     move.w    6(a0),d2
  310.     bsr    a3dmath
  311.     move.w    d6,d2
  312.     move.w    d7,d1
  313.     bsr    doit
  314. md3:
  315.     lea    mydisc3,a0
  316.     tst.w    (a0)
  317.     bmi    md4
  318.     lea    myshad3,a1
  319.     bsr    discmath
  320.     move.w    2(a1),d0
  321.     move.w    4(a1),d1
  322.     move.w    6(a1),d2
  323.     bsr    a3dmath
  324.     move.w    d6,d2
  325.     move.w    d7,d1
  326.     cmpi.w    #195,d1
  327.     bge    skmd3
  328.     bsr    doitb
  329. skmd3:    lea    mydisc3,a0
  330.     move.w    2(a0),d0
  331.     move.w    4(a0),d1
  332.     move.w    6(a0),d2
  333.     bsr    a3dmath
  334.     move.w    d6,d2
  335.     move.w    d7,d1
  336.     bsr    doit
  337. md4:
  338.     subq.w    #1,discdelaycount
  339.     bmi    md5
  340.     rts
  341. md5:
  342.     move.w    #-1,discdelaycount
  343.     rts
  344.  
  345. discmath:    
  346.     cmpi.w    #2,36(a0)
  347.     beq    specialdm
  348.     cmpi.w    #5,38(a0)
  349.     bge    specialdm
  350.     move.l    20(a0),d0    ;x scaled up
  351.     move.l    24(a0),d1    ;y
  352.     move.l    28(a0),d2    ;z
  353.     add.l    8(a0),d0    ;add dx
  354.     add.l    12(a0),d1    ;add dy
  355.     add.l    16(a0),d2    ;add dz
  356.     move.l    d0,20(a0)
  357.     move.l    d1,24(a0)
  358.     move.l    d2,28(a0)
  359.     asr.l    #4,d0        ;scale down
  360.     asr.l    #4,d1
  361.     asr.l    #4,d2
  362.     move.w    d0,2(a0)
  363.     move.w    d1,4(a0)
  364.     move.w    d2,6(a0)
  365.     move.w    d0,2(a1)
  366.     move.w    d2,6(a1)
  367.     bsr    chkbounds
  368.     rts
  369.  
  370. makeneg:
  371.     tst.l    d7
  372.     blt    mnback
  373.     neg.l    d7
  374. mnback:
  375.     rts
  376. makeplus:
  377.     tst.l    d7
  378.     bgt    mpback
  379.     neg.l    d7
  380. mpback:
  381.     rts
  382.  
  383. specialdm:
  384.     move.w    mymanx,d0
  385.     move.w    mymany,d1
  386.     move.w    mymanz,d2
  387.     bsr    chkmyman
  388. sdm1:
  389.     cmp.w    2(a0),d0
  390.     bgt    sdm2
  391. *    move.l    8(a0),d7
  392. *    bsr    makeneg
  393.     move.l    #-300,8(a0)
  394.     bra    sdm3
  395. sdm2:
  396. *    move.l    8(a0),d7
  397. *    bsr    makeplus
  398.     move.l    #300,8(a0)
  399. sdm3:
  400.     cmp.w    6(a0),d2
  401.     bgt    sdm4
  402. *    move.l    16(a0),d7
  403. *    bsr    makeneg
  404.     move.l    #-500,16(a0)
  405.     bra    sdm5
  406. sdm4:
  407. *    move.l    16(a0),d7
  408. *    bsr    makeplus
  409.     move.l    #500,16(a0)
  410. sdm5:
  411.     move.l    20(a0),d0    ;x scaled up
  412.     move.l    24(a0),d1    ;y
  413.     move.l    28(a0),d2    ;z
  414.     add.l    8(a0),d0    ;add dx
  415.     add.l    12(a0),d1    ;add dy
  416.     add.l    16(a0),d2    ;add dz
  417.     move.l    d0,20(a0)
  418.     move.l    d1,24(a0)
  419.     move.l    d2,28(a0)
  420.     asr.l    #6,d0        ;scale down
  421.     asr.l    #6,d1
  422.     asr.l    #6,d2
  423.     move.w    d0,2(a0)
  424.     move.w    d1,4(a0)
  425.     move.w    d2,6(a0)
  426.     move.w    d0,2(a1)
  427.     move.w    d2,6(a1)
  428.     bsr    chkbounds
  429.     rts
  430.  
  431. chkmyman:
  432.     subq.w    #5,d0        ;x
  433.     add.w    #10,d1        ;y
  434.     addq.w    #5,d2        ;z
  435. cmm1:
  436.     cmp.w    2(a0),d0
  437.     bgt    notbackyet
  438. cmm2:
  439.     cmp.w    4(a0),d1
  440.     bgt    notbackyet
  441. cmm3:
  442.     cmp.w    6(a0),d2
  443.     blt    notbackyet
  444.  
  445.     add.w    #10,d0
  446.     sub.w    #20,d1
  447.     sub.w    #10,d2
  448. cmm4:
  449.     cmp.w    2(a0),d0
  450.     blt    notbackyet
  451. cmm5:
  452.     cmp.w    4(a0),d1
  453.     blt    notbackyet
  454. cmm6:
  455.     cmp.w    6(a0),d2
  456.     bgt    notbackyet
  457. cmm7:
  458.     move.w    #-1,(a0)
  459. notbackyet:
  460.     rts
  461.  
  462. chkbounds:
  463.     move.w    2(a0),d0
  464.     move.w    4(a0),d1
  465.     move.w    6(a0),d2
  466. cb1:
  467.     cmpi.w    #-100,d0
  468.     bge    cb2
  469.     neg.l    8(a0)
  470.     move.w    #-100,2(a0)
  471.     addq.w    #1,38(a0)
  472.     bra    cb3
  473. cb2:
  474.     cmpi.w    #100,d0
  475.     ble    cb3
  476.     neg.l    8(a0)
  477.     move.w    #100,2(a0)
  478.     addq.w    #1,38(a0)
  479. cb3:
  480.     cmpi.w    #225,d2
  481.     bge    cb4
  482.     neg.l    16(a0)
  483.     move.w    #225,6(a0)
  484.     addq.w    #1,38(a0)
  485.     bra    cb5
  486. cb4:
  487.     cmpi.w    #625,d2
  488.     ble    cb5
  489.     neg.l    16(a0)
  490.     move.w    #625,6(a0)
  491.     addq.w    #1,38(a0)
  492. cb5:
  493.     cmpi.w    #325,d2
  494.     bge    cb6
  495.     move.w    #1,32(a0)
  496.     bra    cb7
  497. cb6:
  498.     move.w    #1,34(a0)
  499. cb7:
  500.     move.w    32(a0),d7
  501.     and.w    34(a0),d7
  502.     tst.w    d7
  503.     beq    cb8
  504.     addq.w    #1,36(a0)
  505.     move.w    #0,32(a0)
  506.     move.w    #0,34(a0)
  507. cb8:    
  508.     rts
  509.  
  510.  
  511. getcursor:
  512.     cmpi.w    #1,cursorflag
  513.     beq    gc2
  514.     lea    cursordef1,a6
  515.     move.w    (a6),d0        ;get x
  516.     move.w    2(a6),d1    ;y
  517.     move.w    4(a6),d2    ;z
  518.     bra    cmath
  519. gc2:
  520.     lea    cursordef2,a6
  521.     move.w    (a6),d0        ;get x
  522.     move.w    2(a6),d1    ;y
  523.     move.w    4(a6),d2    ;z
  524.  
  525. cmath:
  526.     and.l    #$ffff,d0
  527.     and.l    #$ffff,d1
  528.     and.l    #$ffff,d2
  529.     moveq    #0,d5
  530.     moveq    #0,d6
  531.     moveq    #0,d7
  532.     move.w    mymanx,d5    ;note:z used for y
  533.     move.w    mymany,d6
  534.     move.w    mymanz,d7
  535.     move.w    d5,2(a0)
  536.     move.w    d6,4(a0)
  537.     move.w    d7,6(a0)
  538.     asl.l    #4,d0        ;scale em all up
  539.     asl.l    #4,d1
  540.     asl.l    #4,d2
  541.     asl.l    #4,d5
  542.     asl.l    #4,d6
  543.     asl.l    #4,d7
  544.     move.l    d5,20(a0)
  545.     move.l    d6,24(a0)
  546.     move.l    d7,28(a0)
  547.     sub.l    d0,d5        ;d5=dx
  548.     sub.l    d1,d6        ;d6=dy
  549.     sub.l    d2,d7        ;d7=dz
  550.     neg.l    d5
  551.     neg.l    d7
  552.     neg.l    d6
  553.     asr.l    #4,d5
  554.     asr.l    #4,d6
  555.     asr.l    #4,d7
  556.     ext.l    d5
  557.     ext.l    d6
  558.     ext.l    d7
  559.     move.w    d5,d0
  560.     move.w    d0,d1
  561.     muls    d1,d0        ;sqr x
  562.     move.w    d7,d1        ;sqr z
  563.     move.w    d1,d2
  564.     muls    d2,d1
  565.     add.l    d1,d0
  566.     move.l    d0,d4        ;save that
  567.     bsr    sqrt
  568.     and.l    #$ffff,d1
  569. mybp:    and.l    #$ffff,d5
  570.     asl.l    #4,d5        ;*vel
  571.     ext.l    d5
  572.     divs    d1,d5
  573.     and.l    #$ffff,d5
  574.     asl.l    #4,d5        ;scaleup
  575.     move.l    d5,8(a0)
  576.  
  577.     and.l    #$ffff,d7
  578.     asl.l    #4,d7        ;*vel
  579.     ext.l    d7
  580.     divs    d1,d7
  581.     and.l    #$ffff,d7
  582.     ext.l    d7
  583.     asl.l    #4,d7        ;scaleup
  584.     move.l    d7,16(a0)
  585.  
  586.     move.w    d6,d0
  587.     move.w    d0,d1
  588.     muls    d1,d0
  589.     add.l    d4,d0
  590.     bsr    sqrt
  591.  
  592.     and.l    #$ffff,d6
  593.     asl.l    #4,d6        ;*vel
  594.     ext.l    d6
  595.     divs    d1,d6
  596.     and.l    #$ffff,d6
  597.     ext.l    d6
  598.     asl.l    #4,d6        ;scaleup
  599.     move.l    d6,12(a0)
  600. mp:    rts
  601.  
  602. *************************************************
  603. *    Sqroot routine courtesy of Armin    *
  604. *    Input:    d0.l    number to get root of    *
  605. *        d1    answer            *
  606. *************************************************
  607. sqrt:
  608.     move.w    #10,d4
  609.     lsr.l    #1,d0
  610.     move.l    d0,d1
  611.     lsr.l    #1,d1
  612. sqloop:
  613.     move.w    d1,d2
  614.     lsr.l    #1,d2
  615.     move.l    d0,d3
  616.     divu    d1,d3
  617.     sub.l    d2,d1
  618.     add.w    d3,d1
  619.     dbf    d4,sqloop
  620.     rts
  621.  
  622.  
  623.  
  624. a3dmath:
  625.     moveq    #0,d3
  626.     move.w    d0,d3        ;get x
  627.     muls    #magic,d3    ;persp
  628.     move.w    d2,d4        ;get z
  629.     divs    d4,d3
  630.     add.w    #159,d3        ;adjust for centre of screen
  631.     move.w    d3,d6        ;return screenx in d6
  632.  
  633.     moveq    #0,d3        ;get y
  634.     move.w    d1,d3
  635.     muls    #magic,d3
  636.     divs    d4,d3
  637.     add.w    #20,d3        ;adjust for centre
  638.     move.w    d3,d7        ;return screeny in d7
  639.     rts
  640.  
  641.  
  642. cursorflag:    blk.w    1,0
  643. mymanx:        blk.w    1,0
  644. mymany:        blk.w    1,0
  645. mymanz:        blk.w    1,0
  646. discdelaycount:    blk.w    1,0
  647. mydisc1:
  648.     dc.w    -1        ;flag for active neg=no
  649.     dc.w    0,0,0        ;x,y,z current loc
  650.     dc.l    0,0,0        ;dx,dy,dz
  651.     dc.l    0,0,0        ;x,y,z scaled up
  652.     dc.w    0,0,0        ;flag for cross of middle
  653.     dc.w    0
  654. mydisc2:
  655.     dc.w    -1        ;flag for active neg=no
  656.     dc.w    0,0,0        ;x,y,z current loc
  657.     dc.l    0,0,0        ;dx,dy,dz
  658.     dc.l    0,0,0        ;x,y,z scaled up
  659.     dc.w    0,0,0        ;flag for cross of middle
  660.     dc.w    0
  661. mydisc3:
  662.     dc.w    -1        ;flag for active neg=no
  663.     dc.w    0,0,0        ;x,y,z current loc
  664.     dc.l    0,0,0        ;dx,dy,dz
  665.     dc.l    0,0,0        ;x,y,z scaled up
  666.     dc.w    0,0,0        ;flag for cross of middle
  667.     dc.w    0
  668. myshad1:
  669.     dc.w    -1        ;flag for active neg=no
  670.     dc.w    0,140,0        ;x,y,z current loc
  671.     dc.l    0,0,0        ;dx,dy,dz
  672.     dc.l    0,8960,0    ;x,y,z scaled up
  673.     dc.w    0,0,0        ;flag for cross of middle
  674.     dc.w    0
  675. myshad2:
  676.     dc.w    -1        ;flag for active neg=no
  677.     dc.w    0,140,0        ;x,y,z current loc
  678.     dc.l    0,0,0        ;dx,dy,dz
  679.     dc.l    0,8960,0    ;x,y,z scaled up
  680.     dc.w    0,0,0        ;flag for cross of middle
  681.     dc.w    0
  682. myshad3:
  683.     dc.w    -1        ;flag for active neg=no
  684.     dc.w    0,140,0        ;x,y,z current loc
  685.     dc.l    0,0,0        ;dx,dy,dz
  686.     dc.l    0,8960,0    ;x,y,z scaled up
  687.     dc.w    0,0,0        ;flag for cross of middle
  688.     dc.w    0
  689.  
  690.  
  691. squaredef:
  692.     dc.w    0,-20,425        ;x,y,z
  693.     dc.w    4        ;number of points
  694.     dc.l    sqpts
  695.     dc.w    -100,0,200
  696.     dc.w    100,0,200
  697.     dc.w    100,0,-200
  698.     dc.w    -100,0,-200
  699. sqpts:    blk.w    8,0
  700. cursordef1:
  701.     dc.w    0,0,0        ;x,y,z
  702.     dc.w    4        ;number of points
  703.     dc.l    curspts1
  704.     dc.w    -5,5,0
  705.     dc.w    5,5,0
  706.     dc.w    5,-5,0
  707.     dc.w    -5,-5,0
  708. curspts1:
  709.     blk.w    20,0
  710. cursordef2:
  711.     dc.w    0,0,0        ;x,y,z
  712.     dc.w    4        ;number of points
  713.     dc.l    curspts2
  714.     dc.w    0,5,-5
  715.     dc.w    0,5,5
  716.     dc.w    0,-5,5
  717.     dc.w    0,-5,-5
  718. curspts2:
  719.     blk.w    20,0
  720.  
  721. *********************************************
  722. maketable:
  723.     move.l    #cursortable,a0        ;address of table
  724.     move.w    #100,d0
  725. mtl1:
  726.     move.w    d0,(a0)+        ;thats x
  727.     move.w    #0,(a0)+        ;thats y(filled in later)
  728.     move.w    #225,(a0)+        ;thats z
  729.     move.w    #0,(a0)+        ;flag for which type
  730.     subq.w    #1,d0
  731.     cmpi.w    #-100,d0
  732.     bgt    mtl1
  733.  
  734.     move.w    #225,d0
  735. mtl2:
  736.     move.w    #-100,(a0)+        ;thats x
  737.     move.w    #0,(a0)+        ;thats y(filled in later)
  738.     move.w    d0,(a0)+        ;thats z
  739.     move.w    #1,(a0)+        ;flag for which type
  740.     addq.w    #1,d0
  741.     cmpi.w    #625,d0
  742.     blt    mtl2
  743.  
  744.     move.w    #-100,d0
  745. mtl3:
  746.     move.w    d0,(a0)+        ;thats x
  747.     move.w    #0,(a0)+        ;thats y(filled in later)
  748.     move.w    #625,(a0)+        ;thats z
  749.     move.w    #0,(a0)+        ;flag for which type
  750.     addq.w    #1,d0
  751.     cmpi.w    #100,d0
  752.     blt    mtl3
  753.  
  754.     move.w    #625,d0
  755. mtl4:
  756.     move.w    #100,(a0)+        ;thats x
  757.     move.w    #0,(a0)+        ;thats y(filled in later)
  758.     move.w    d0,(a0)+        ;thats z
  759.     move.w    #1,(a0)+        ;flag for which type
  760.     subq.w    #1,d0
  761.     cmpi.w    #225,d0
  762.     bgt    mtl4
  763.     rts
  764. cursortable:
  765.     blk.w    5000,0
  766.  
  767. myvbl:
  768.     addq.w    #1,vblcount
  769.     cmpi.w    #50,vblcount
  770.     blt    myvb
  771.     move.w    fcount,score
  772.     move.w    #0,fcount
  773.     move.w    #0,vblcount
  774. myvb:
  775.     rts
  776.  
  777. vblcount:    blk.w    1,0
  778. fcount:        blk.w    1,0
  779.  
  780. setuphbl:
  781.     move.b    ieb,oldieb
  782.     move.b    iea,oldiea
  783.     move.b    ima,oldima
  784.     move.l    key_vec,oldkeyvec
  785.     move.l    key_vec,keyt+2
  786.     move.l    #key_handler,key_vec        ;put new key stuff in
  787.     and.b    #$df,ieb    ;stop 200hz timer
  788.     and.b    #$fe,iea    ;stop hblank
  789.     move.l    hbl_vec,oldhblvec
  790. *    move.l    hbl_vec,hblt+2
  791.     move.l    #hblhandler2,hbl_vec
  792.     or.b    #1,iea            ;enable hblank
  793.     or.b    #1,ima
  794.     move.l    vbl_vec,vblt+2        ;set up vbl handler
  795.     move.l    vbl_vec,oldvblvec
  796.     move.l    #vbl_handler,vbl_vec
  797.     rts
  798.  
  799. hblhandler2:
  800.     movem.l    d0/a0,-(sp)
  801.     move.b    #0,tbcr
  802.     move.b    #3,tbdr
  803.     move.b    #8,tbcr
  804.     move.l    #backcolors,a0
  805.     move.w    colorcount,d0
  806.     move.w    (a0,d0.w),$ff8240
  807.     addq.w    #2,colorcount
  808.     cmpi.w    #42,d0
  809.     blt    hblover
  810.     move.w    #0,colorcount    
  811.     move.b    #0,tbcr
  812.     move.b    #100,tbdr
  813.     move.b    #8,tbcr
  814. hblover:
  815.     bclr    #0,isra
  816.     movem.l    (sp)+,d0/a0
  817.     rte
  818.  
  819.  
  820. vbl_handler:
  821. *    move.w    #0,linecount
  822.     move.w    #$0001,$ff8240
  823.     move.w    #0,colorcount
  824.     move.b    #0,tbcr
  825.     move.b    #90,tbdr
  826.     move.b    #8,tbcr
  827. vblt:    jmp    $0
  828.  
  829.  
  830.  
  831. key_handler:
  832.     move.w    #$2500,sr
  833. keyt:    jmp    $0
  834.  
  835. colorcount:    blk.w    1,0
  836. oldvblvec:    blk.l    1,0
  837. oldkeyvec:    blk.l    1,0
  838. oldhblvec:    blk.l    1,0
  839. oldieb:        blk.b    1,0
  840. oldiea:        blk.b    1,0
  841. oldima:        blk.b    1,0
  842. even
  843. backcolors:
  844.     dc.w    $0001,$0002,$0003,$0004,$0005,$0006,$0007
  845.     dc.w    $0107,$0207,$0307,$0407,$0507,$0607,$0707
  846.     dc.w    $0716,$0725,$0734,$0743,$0752,$0761,$0770
  847.     dc.w    $0000
  848.     
  849.  
  850. putballs:
  851. *    move.l    masterimage,a0
  852.     move.w    d0,d2        ;get copy of x
  853.     and.w    #15,d0        ;last 4 bits is offset
  854.     move.w    d0,d3
  855.     mulu    #240,d0
  856.     adda.w    d0,a0        ;now pointing at correct image
  857.     move.l    a0,imageptr
  858. *    move.l    mastermask,a0
  859.     asr.w    #1,d0
  860.     adda.w    d0,a0
  861.     move.l    a0,maskptr
  862.     move.l    hiden,a0
  863.     lsl.w    #5,d1        ;mult y by 128
  864.     adda.w    d1,a0        ;add it to screen address
  865.     lsl.w    #2,d1        ;mult by 32 makes mult by 160
  866.     add.w    d1,a0
  867.     and.w    #$fff0,d2    ;mask off last 4 bits gives word across
  868.     lsr.w    #1,d2
  869.     adda.w    d2,a0
  870.     move.l    a0,screenloc
  871.     move.w    #1,width
  872.     move.w    #15,height
  873.     bsr    pdrawimage
  874.     rts
  875. *****************************************
  876. myreset:
  877.     rts
  878. cxmin:        equ    0
  879. cxmax:        equ    319
  880. cymin:        equ    0
  881. cymax:        equ    199
  882. cbits:    blk.w    1,0
  883. cbits2:    blk.w    1,0
  884. xsav:    blk.w    1,0
  885. ysav:    blk.w    1,0
  886. *dx:    blk.w    1,0
  887. *dy:    blk.w    1,0
  888. */**//*/*//*//*/*//*//*/*/*//*/*/*/*//*/*/*/*//*//*//*///*/*/
  889. bitcode:clr.l   d4
  890.         cmpi.w  #cxmin,d0
  891.         bge     b1
  892.         or.b    #8,d4
  893. b1:     cmpi.w  #cxmax,d0
  894.         ble     b2
  895.         or.b    #4,d4
  896. b2:     cmpi.w  #cymin,d1
  897.         bge     b3
  898.         or.b    #1,d4
  899. b3:     cmpi.w  #cymax,d1
  900.         ble     b4
  901.         or.b    #2,d4
  902. b4:     move.w  d4,cbits
  903.         rts
  904. *****
  905. bitc2:   clr.l   d5
  906.         cmpi.w  #cxmin,d2
  907.         bge     b5
  908.         or.b    #8,d5
  909. b5:     cmpi.w  #cxmax,d2
  910.         ble     b6
  911.         or.b    #4,d5
  912. b6:     cmpi.w  #cymin,d3
  913.         bge     b7
  914.         or.b    #1,d5
  915. b7:     cmpi.w  #cymax,d3
  916.         ble     b8
  917.         or.b    #2,d5
  918. b8:     move.w  d5,cbits2
  919.         rts
  920. ********************************************************
  921. clipit:
  922.     movem.l    d0-d7/a0,-(sp)
  923.     move.w    x1,d0
  924.     move.w    y1,d1
  925.     move.w    x2,d2
  926.     move.w    y2,d3
  927.  
  928.     bsr     bitcode
  929.         bsr     bitc2
  930. clipit2:or.b    d4,d5
  931.         tst.b   d5
  932.         beq     cliphome        ;finish if
  933.         move.w  cbits,d4
  934.         move.w  d2,xsav
  935.         move.w  d3,ysav
  936.         move.w  cbits2,d5
  937. clip1:  and.b   d4,d5
  938.         tst.b   d5
  939.         bgt     clipb           ;home if line completely out
  940.         move.w  cbits,d4
  941.         move.w  cbits2,d5
  942.         sub.w   d0,d2           ;d1 has dx
  943.         move.w  d2,dx
  944.         sub.w   d1,d3           ;d3 has dy
  945.         move.w  d3,dy
  946.         move.w  xsav,d2
  947.         move.w  ysav,d3
  948.         tst.w   d4
  949.         beq     clip2       ;if x1<xmin
  950.         cmpi.w  #cxmin,d0     ;y1=y1+dy*(xmin-x1)/dx
  951.         bge     c1      
  952.         move.w  #cxmin,d7         ;put xmin in d7
  953.         sub.w   d0,d7
  954.         muls    dy,d7           ;multiply by dy
  955.         divs    dx,d7
  956.         add.w   d1,d7
  957.         move.w  d7,d1
  958.         move.w  #cxmin,d0         ;x1=xmin
  959.         bra     c4
  960. c1:     cmpi.w  #cxmax,d0         ;if x1>xmax
  961.         ble     c2              ;y1=y1+dy*(xmax-x1)/dx
  962.         move.w  #cxmax,d7         ;put xmax in d7
  963.         sub.w   d0,d7
  964.         muls    dy,d7           ;multiply by dy
  965.         divs    dx,d7
  966.         add.w   d1,d7
  967.         move.w  d7,d1
  968.         move.w  #cxmax,d0         ;x1=xmax
  969.         bra     c4
  970. c2:     cmpi.w  #cymin,d1         ;if y1<ymin
  971.         bge     c3
  972.         move.w  #cymin,d7         ;put ymin in d7
  973.         sub.w   d1,d7
  974.         muls    dx,d7           ;multiply by dx
  975.         divs    dy,d7
  976.         add.w   d0,d7
  977.         move.w  d7,d0
  978.         move.w  #cymin,d1         ;y1=ymin
  979.         bra     c4
  980. c3:     cmpi.w  #cymax,d1         ;if y1>xmax
  981.         ble     c4
  982.         move.w  #cymax,d7         ;put ymax in d7
  983.         sub.w   d1,d7
  984.         muls    dx,d7           ;multiply by dy
  985.         divs    dy,d7
  986.         add.w   d0,d7
  987.         move.w  d7,d0
  988.         move.w  #cymax,d1         ;y1=ymax
  989. c4:     bsr     bitcode
  990.         bra     cliploop
  991. ******
  992. clip2:  cmpi.w  #cxmin,d2 ;    y1=y1+dy*(xmin-x1)/dx
  993.         bge     cc1     
  994.         move.w  #cxmin,d7         ;put xmin in d7
  995.         sub.w   d2,d7
  996.         muls    dy,d7           ;multiply by dy
  997.         divs    dx,d7
  998.         add.w   d3,d7
  999.         move.w  d7,d3
  1000.         move.w  #cxmin,d2         ;x2=xmin
  1001.         bra     cc4
  1002. cc1:    cmpi.w  #cxmax,d2         ;if x2>xmax
  1003.         ble     cc2
  1004.         move.w  #cxmax,d7         ;put xmax in d7
  1005.         sub.w   d2,d7
  1006.         muls    dy,d7           ;multiply by dy
  1007.         divs    dx,d7
  1008.         add.w   d3,d7
  1009.         move.w  d7,d3
  1010.         move.w  #cxmax,d2         ;x1=xmax
  1011.         bra     cc4
  1012. cc2:    cmpi.w  #cymin,d3         ;if y1<ymin
  1013.         bge     cc3
  1014.         move.w  #cymin,d7         ;put ymin in d7
  1015.         sub.w   d3,d7
  1016.         muls    dx,d7           ;multiply by dx
  1017.         divs    dy,d7
  1018.         add.w   d2,d7
  1019.         move.w  d7,d2
  1020.         move.w  #cymin,d3         ;y1=ymin
  1021.         bra     cc4
  1022. cc3:    cmpi.w  #cymax,d3         ;if y1>xmax
  1023.         ble     cc4
  1024.         move.w  #cymax,d7         ;put ymax in d7
  1025.         sub.w   d3,d7
  1026.         muls    dx,d7           ;multiply by dy
  1027.         divs    dy,d7
  1028.         add.w   d2,d7
  1029.         move.w  d7,d2
  1030.         move.w  #cymax,d3         ;y1=ymax
  1031. cc4:    bsr     bitc2
  1032.         bra     cliploop
  1033.  
  1034. cliploop:
  1035.         bra     clipit2
  1036. cliphome:
  1037.         move.w  d0,x1
  1038.         move.w  d1,y1
  1039.         move.w  d2,x2
  1040.         move.w  d3,y2
  1041.     bsr    myline
  1042. clipb:
  1043.     movem.l    (sp)+,d0-d7/a0
  1044.     rts
  1045. *********************************************************
  1046. linecolor:
  1047.     blk.w    1,0
  1048. ***********************************************
  1049. *    lets plot a fucking line
  1050. *    but lets do it fast
  1051. *    first some conventions
  1052. *    draws line on hiden screen
  1053. *    between x1,y1,x2,y2 
  1054. ***********************************************
  1055. myline:
  1056. *    movem.l    d4-d7/a0,-(sp)
  1057. calcdx:
  1058.     move.w    x2,d0
  1059.     sub.w    x1,d0    ;x2-x1
  1060.     move.w    d0,dx    ;d0 is dx
  1061.     bpl    calcdy
  1062.     neg    d0
  1063. calcdy:
  1064.     move.w    y2,d1
  1065.     sub.w    y1,d1    ;y2-y1    
  1066.     move.w    d1,dy    ;d6 is dy
  1067.     bpl    cmparedxdy
  1068.     neg    d1
  1069. cmparedxdy:
  1070.     cmp.w    d0,d1
  1071.     bgt    ymajor    ;if dy is greater then ymajor
  1072. xmajor:
  1073. *    tst.w    dy
  1074. *    beq    horizontal    ;special case
  1075.     tst.w    dx
  1076.     bpl    noswapx
  1077.     move.w    x2,d0
  1078.     move.w    x1,x2
  1079.     move.w    d0,x1
  1080.     move.w    y2,d0
  1081.     move.w    y1,y2
  1082.     move.w    d0,y1
  1083.     neg    dx
  1084.     neg    dy
  1085. noswapx:
  1086.     move.l    #0,d0
  1087.     move.w    dx,d0
  1088.     divs    dy,d0
  1089.     bmi    xpositive
  1090.  
  1091. xnegative:
  1092.     move.l    hiden,a0    ;screen ad
  1093.     move.w    dx,d0
  1094.     move.w    d0,d7    ;counter is d7
  1095.     subq.w    #1,d7
  1096. bp:    asr.w    #1,d0    ;div by 2
  1097.     move.w    d0,d6    ;dump is d6
  1098.     move.w    x1,d0    ;will hold bitpattern
  1099.     move.w    d0,d2
  1100.     move.w    y1,d1
  1101.     lsl.w    #5,d1    ;mult y by 128
  1102.     adda.w    d1,a0    ;add it to screen address
  1103.     lsl.w    #2,d1    ;mult by 32 makes mult by 160
  1104.     add.w    d1,a0    ;a0 now has start screen address
  1105.     and.w    #$fff0,d0    ;mask off last 4 bits gives word across
  1106.     lsr.w    #1,d0
  1107.     add.w    d0,a0
  1108.     moveq    #0,d4
  1109.     tst.w    d7
  1110.     bmi    specxneg
  1111. xmnloop:
  1112.     addq.w    #1,d2
  1113.     move.w    d2,d3
  1114.     and.w    #15,d3
  1115.     bne    xmnla
  1116.     bsr    putlinein
  1117.     moveq    #0,d4
  1118.     addq.l    #8,a0
  1119. xmnla:    sub.w    #15,d3
  1120.     neg    d3
  1121.     bset    d3,d4
  1122.     sub.w    dy,d6    ;sub dy from dump
  1123.     bpl    xmn
  1124.     add.w    dx,d6
  1125.     bsr    putlinein
  1126.     adda.l    #160,a0        ;moveit to next line
  1127.     moveq    #0,d4
  1128. xmn:
  1129.     dbf    d7,xmnloop
  1130. specxneg:
  1131.     move.w    d2,d3
  1132.     and.w    #15,d3
  1133.     sub.w    #14,d3
  1134.     neg    d3
  1135.     bset    d3,d4
  1136.     bsr    putlinein
  1137.     rts
  1138.  
  1139. putlinein:
  1140.     move.w    d4,d5
  1141.     eor.w    #$ffff,d5
  1142.     and.w    d5,(a0)        ;clearout old pixels
  1143.     and.w    d5,2(a0)
  1144.     and.w    d5,4(a0)
  1145.     and.w    d5,6(a0)
  1146.     move.w    linecolor,d5
  1147. plane1:
  1148.     btst    #0,d5
  1149.     beq    plane2
  1150.     or.w    d4,(a0)
  1151. plane2:
  1152.     btst    #1,d5
  1153.     beq    plane3
  1154.     or.w    d4,2(a0)
  1155. plane3:
  1156.     btst    #2,d5
  1157.     beq    plane4
  1158.     or.w    d4,4(a0)
  1159. plane4:
  1160.     btst    #3,d5
  1161.     beq    plane5
  1162.     or.w    d4,6(a0)
  1163. plane5:
  1164.     rts
  1165.  
  1166. xpositive:
  1167.     move.l    hiden,a0    ;screen ad
  1168.     move.w    dx,d0
  1169.     move.w    d0,d7    ;counter is d7
  1170.     subq.w    #1,d7
  1171.     asr.w    #1,d0    ;div by 2
  1172.     move.w    d0,d6    ;dump is d6
  1173.     move.w    x1,d0    ;will hold bitpattern
  1174.     move.w    d0,d2
  1175.     move.w    y1,d1
  1176.     lsl.w    #5,d1    ;mult y by 128
  1177.     adda.w    d1,a0    ;add it to screen address
  1178.     lsl.w    #2,d1    ;mult by 32 makes mult by 160
  1179.     add.w    d1,a0    ;a0 now has start screen address
  1180.     and.w    #$fff0,d0    ;mask off last 4 bits gives word across
  1181.     lsr.w    #1,d0
  1182.     add.w    d0,a0
  1183.     moveq    #0,d4
  1184. xmploop:
  1185.     addq.w    #1,d2
  1186.     move.w    d2,d3
  1187.     and.w    #15,d3
  1188.     bne    xmpla
  1189.     bsr    putlinein
  1190.     moveq    #0,d4
  1191.     addq.l    #8,a0
  1192. xmpla:    sub.w    #15,d3
  1193.     neg    d3
  1194.     bset    d3,d4
  1195.     add.w    dy,d6    ;sub dy from dump
  1196.     bpl    xmp
  1197.     add.w    dx,d6
  1198.     bsr    putlinein
  1199.     moveq    #0,d4
  1200.     suba.l    #160,a0        ;moveit to next line
  1201. xmp:
  1202.     dbf    d7,xmploop
  1203.     move.w    d2,d3
  1204.     and.w    #15,d3
  1205.     sub.w    #14,d3
  1206.     neg    d3
  1207.     bset    d3,d4
  1208.     bsr    putlinein
  1209.     rts
  1210.  
  1211. ymajor:
  1212.     tst.w    dy
  1213.     bpl    noswapy
  1214.     move.w    x2,d0
  1215.     move.w    x1,x2
  1216.     move.w    d0,x1
  1217.     move.w    y2,d0
  1218.     move.w    y1,y2
  1219.     move.w    d0,y1
  1220.     neg    dx
  1221.     neg    dy
  1222. noswapy:
  1223.     move.l    #0,d0
  1224.     move.w    dy,d0
  1225.     divs    dx,d0
  1226.     bmi    ypositive
  1227. ynegative:
  1228.     tst.w    dx
  1229.     beq    straightup1    ;special case vertical line
  1230.     move.l    hiden,a0    ;screen ad
  1231.     move.w    dy,d0
  1232.     move.w    d0,d7    ;counter is d7
  1233. *    subq.w    #1,d7
  1234.     asr.w    #1,d0    ;div by 2
  1235.     move.w    d0,d6    ;dump is d6
  1236.     move.w    x1,d0    ;will hold bitpattern
  1237.     move.w    d0,d3
  1238.     move.w    y1,d1
  1239.     move.w    d1,d2
  1240.     lsl.w    #5,d1    ;mult y by 128
  1241.     adda.w    d1,a0    ;add it to screen address
  1242.     lsl.w    #2,d1    ;mult by 32 makes mult by 160
  1243.     add.w    d1,a0    ;a0 now has start screen address
  1244.     and.w    #$fff0,d0    ;mask off last 4 bits gives word across
  1245.     lsr.w    #1,d0
  1246.     add.w    d0,a0
  1247.     move.w    d3,d0    ;x
  1248.     moveq    #0,d4
  1249.     move.w    d0,d3
  1250.     and.w    #15,d3
  1251.     move.w    #$8000,d4
  1252.     lsr.w    d3,d4
  1253. ymnloop:
  1254.     bsr    putlinein
  1255.     add.w    #160,a0    ;y+1
  1256.     sub.w    dx,d6    ;sub dy from dump
  1257.     bpl    ymn
  1258.     add.w    dy,d6
  1259.     addq.w    #1,d0    ;x+1
  1260.     move.w    d0,d3
  1261.     and.w    #15,d3
  1262.     bne    ymnla
  1263.     addq.l    #8,a0
  1264. ymnla:    move.w    #$8000,d4
  1265.     lsr.w    d3,d4
  1266. ymn:
  1267.     dbf    d7,ymnloop
  1268. *    movem.l    (sp)+,d4-d7/a0
  1269.     rts
  1270.  
  1271. ypositive:
  1272.     tst.w    dx
  1273.     beq    straightup    ;special case vertical line
  1274.     move.l    hiden,a0    ;screen ad
  1275.     move.w    dy,d0
  1276.     move.w    d0,d7    ;counter is d7
  1277.     subq.w    #1,d7
  1278.     asr.w    #1,d0    ;div by 2
  1279.     move.w    d0,d6    ;dump is d6
  1280.     move.w    x1,d0    ;will hold bitpattern
  1281.     move.w    d0,d3
  1282.     move.w    y1,d1
  1283.     move.w    d1,d2
  1284.     lsl.w    #5,d1    ;mult y by 128
  1285.     adda.w    d1,a0    ;add it to screen address
  1286.     lsl.w    #2,d1    ;mult by 32 makes mult by 160
  1287.     add.w    d1,a0    ;a0 now has start screen address
  1288.     and.w    #$fff0,d0    ;mask off last 4 bits gives word across
  1289.     lsr.w    #1,d0
  1290.     add.w    d0,a0
  1291.     move.w    d3,d0    ;x
  1292.     moveq    #0,d4
  1293. *    move.w    d0,d3
  1294.     and.w    #15,d3
  1295.     move.w    #$8000,d4
  1296.     lsr.w    d3,d4
  1297.  
  1298. ymploop:
  1299.     bsr    putlinein
  1300.     add.w    #160,a0    ;y+1
  1301.     add.w    dx,d6    ;sub dy from dump
  1302.     bpl    ymp
  1303.     add.w    dy,d6
  1304.     subq.w    #1,d0    ;x+1
  1305.     move.w    d0,d3
  1306.     and.w    #15,d3
  1307.     cmpi.w    #15,d3
  1308.     bne    ympla
  1309.     subq.l    #8,a0
  1310. ympla:    move.w    #$8000,d4
  1311.     lsr.w    d3,d4
  1312. ymp:
  1313.     dbf    d7,ymploop
  1314. *    movem.l    (sp)+,d4-d7/a0
  1315.     rts
  1316.  
  1317. straightup:
  1318.     move.l    hiden,a0    ;screen ad
  1319.     move.w    dy,d7
  1320.     move.w    x1,d0    ;will hold bitpattern
  1321.     move.w    d0,d3
  1322.     move.w    y1,d1
  1323.     lsl.w    #5,d1    ;mult y by 128
  1324.     adda.w    d1,a0    ;add it to screen address
  1325.     lsl.w    #2,d1    ;mult by 32 makes mult by 160
  1326.     add.w    d1,a0    ;a0 now has start screen address
  1327.     and.w    #$fff0,d0    ;mask off last 4 bits gives word across
  1328.     lsr.w    #1,d0
  1329.     add.w    d0,a0    ;now a0 is ready
  1330.     moveq    #0,d4
  1331.     and.w    #15,d3
  1332.     move.w    #$8000,d4
  1333.     lsr.w    d3,d4    ;d4 has proper bit pattern
  1334.     add.l    #160,a0
  1335. stuploop:
  1336.     bsr    putlinein
  1337.     add.l    #160,a0
  1338.     dbf    d7,stuploop
  1339. *    movem.l    (sp)+,d4-d7/a0
  1340.     rts    
  1341.  
  1342. straightup1:
  1343.     move.l    hiden,a0    ;screen ad
  1344.     move.w    dy,d7
  1345.     move.w    x1,d0    ;will hold bitpattern
  1346.     move.w    d0,d3
  1347.     move.w    y1,d1
  1348.     lsl.w    #5,d1    ;mult y by 128
  1349.     adda.w    d1,a0    ;add it to screen address
  1350.     lsl.w    #2,d1    ;mult by 32 makes mult by 160
  1351.     add.w    d1,a0    ;a0 now has start screen address
  1352.     and.w    #$fff0,d0    ;mask off last 4 bits gives word across
  1353.     lsr.w    #1,d0
  1354.     add.w    d0,a0    ;now a0 is ready
  1355.     moveq    #0,d4
  1356.     and.w    #15,d3
  1357.     move.w    #$8000,d4
  1358.     lsr.w    d3,d4    ;d4 has proper bit pattern
  1359.     add.l    #160,a0
  1360.  
  1361. stuploop1:
  1362.     bsr    putlinein
  1363.     sub.l    #160,a0
  1364.     dbf    d7,stuploop
  1365. *    movem.l    (sp)+,d4-d7/a0
  1366.     rts    
  1367.  
  1368.  
  1369. dump:    blk.w    1,0
  1370. gradient:    blk.w    1,0
  1371. x1:    blk.w    1,0
  1372. x2:    blk.w    1,0
  1373. y1:    blk.w    1,0
  1374. y2:    blk.w    1,0
  1375. dx:    blk.w    1,0
  1376. dy:    blk.w    1,0
  1377.  
  1378. *********************************************
  1379.  
  1380. *****************************************
  1381. ramware:
  1382.     move.w    #0,let1c
  1383.     move.w    #326,let2c
  1384.     move.w    #308,let3c
  1385.     move.w    #290,let4c
  1386.     move.w    #272,let5c
  1387.     move.w    #254,let6c
  1388.     move.w    #236,let7c
  1389.  
  1390. rw2:
  1391.     bsr    clearsmall
  1392.     bsr    doletters
  1393.     bsr    keyboard
  1394.     bsr    flip2
  1395.     tst.w    firebutton
  1396.     bmi    rw2
  1397.     rts
  1398. clearsmall:
  1399.     move.l    hiden,a0
  1400.     add.l    #56,a0
  1401.     move.w    #36,d7
  1402. clsm:
  1403.     move.l    #0,(a0)+
  1404.     move.l    #0,(a0)+
  1405.     move.l    #0,(a0)+
  1406.     move.l    #0,(a0)+
  1407.     move.l    #0,(a0)+
  1408.     move.l    #0,(a0)+
  1409.     move.l    #0,(a0)+
  1410.     move.l    #0,(a0)+
  1411.     move.l    #0,(a0)+
  1412.     move.l    #0,(a0)+
  1413.     move.l    #0,(a0)+
  1414.     move.l    #0,(a0)+
  1415.     move.l    #0,(a0)+
  1416.     move.l    #0,(a0)+
  1417.     move.l    #0,(a0)+
  1418.     move.l    #0,(a0)+
  1419.     move.l    #0,(a0)+
  1420.     move.l    #0,(a0)+
  1421.     move.l    #0,(a0)+
  1422.     move.l    #0,(a0)+
  1423.     move.l    #0,(a0)+
  1424.     move.l    #0,(a0)+
  1425.     move.l    #0,(a0)+
  1426.     move.l    #0,(a0)+
  1427.     add.w    #64,a0
  1428.     dbf    d7,clsm
  1429.     rts
  1430.  
  1431. doletters:
  1432.     move.l    #rampat,a0
  1433.     move.w    let1c,d0
  1434.     cmpi.w    #344,d0
  1435.     blt    dl1
  1436.     move.w    #0,let1c
  1437. dl1:
  1438.     asl.w    #2,d0        ;mul by 4
  1439.     move.w    (a0,d0.w),d2    ;thats x
  1440.     move.w    2(a0,d0.w),d1    ;thats y
  1441.     move.l    #rsprite,spblock+8
  1442.     bsr    doit        ;put the sucker up
  1443.     addq.w    #1,let1c
  1444. *    rts
  1445.  
  1446.     move.l    #rampat,a0
  1447.     move.w    let2c,d0
  1448.     cmpi.w    #344,d0
  1449.     blt    dl2
  1450.     move.w    #0,let2c
  1451. dl2:
  1452.     asl.w    #2,d0        ;mul by 4
  1453.     move.w    (a0,d0.w),d2    ;thats x
  1454.     move.w    2(a0,d0.w),d1    ;thats y
  1455.     move.l    #asprite,spblock+8
  1456.     bsr    doit        ;put the sucker up
  1457.     addq.w    #1,let2c
  1458.  
  1459.     move.l    #rampat,a0
  1460.     move.w    let3c,d0
  1461.     cmpi.w    #344,d0
  1462.     blt    dl3
  1463.     move.w    #0,let3c
  1464. dl3:
  1465.     asl.w    #2,d0        ;mul by 4
  1466.     move.w    (a0,d0.w),d2    ;thats x
  1467.     move.w    2(a0,d0.w),d1    ;thats y
  1468.     move.l    #msprite,spblock+8
  1469.     bsr    doit        ;put the sucker up
  1470.     addq.w    #1,let3c
  1471.  
  1472.     move.l    #rampat,a0
  1473.     move.w    let4c,d0
  1474.     cmpi.w    #344,d0
  1475.     blt    dl4
  1476.     move.w    #0,let4c
  1477. dl4:
  1478.     asl.w    #2,d0        ;mul by 4
  1479.     move.w    (a0,d0.w),d2    ;thats x
  1480.     move.w    2(a0,d0.w),d1    ;thats y
  1481.     move.l    #wsprite,spblock+8
  1482.     bsr    doit        ;put the sucker up
  1483.     addq.w    #1,let4c
  1484.  
  1485.     move.l    #rampat,a0
  1486.     move.w    let5c,d0
  1487.     cmpi.w    #344,d0
  1488.     blt    dl5
  1489.     move.w    #0,let5c
  1490. dl5:
  1491.     asl.w    #2,d0        ;mul by 4
  1492.     move.w    (a0,d0.w),d2    ;thats x
  1493.     move.w    2(a0,d0.w),d1    ;thats y
  1494.     move.l    #asprite,spblock+8
  1495.     bsr    doit        ;put the sucker up
  1496.     addq.w    #1,let5c
  1497.  
  1498.     move.l    #rampat,a0
  1499.     move.w    let6c,d0
  1500.     cmpi.w    #344,d0
  1501.     blt    dl6
  1502.     move.w    #0,let6c
  1503. dl6:
  1504.     asl.w    #2,d0        ;mul by 4
  1505.     move.w    (a0,d0.w),d2    ;thats x
  1506.     move.w    2(a0,d0.w),d1    ;thats y
  1507.     move.l    #rsprite,spblock+8
  1508.     bsr    doit        ;put the sucker up
  1509.     addq.w    #1,let6c
  1510.  
  1511.     move.l    #rampat,a0
  1512.     move.w    let7c,d0
  1513.     cmpi.w    #344,d0
  1514.     blt    dl7
  1515.     move.w    #0,let7c
  1516. dl7:
  1517.     asl.w    #2,d0        ;mul by 4
  1518.     move.w    (a0,d0.w),d2    ;thats x
  1519.     move.w    2(a0,d0.w),d1    ;thats y
  1520.     move.l    #esprite,spblock+8
  1521.     bsr    doit        ;put the sucker up
  1522.     addq.w    #1,let7c
  1523.     rts
  1524.  
  1525.  
  1526. doit:
  1527.     subq.w    #6,d2
  1528.     cmpi.w    #425,6(a0)
  1529.     blt    doit2
  1530.     move.l    #bdiscsp2,a0
  1531.     move.w    d2,(a0)        ;putx
  1532.     move.w    d1,2(a0)    ;puty
  1533.     bra    putsprite
  1534. doit2:
  1535.     cmpi.w    #325,6(a0)
  1536.     blt    doit3
  1537.     move.l    #bdiscsp1,a0
  1538.     move.w    d2,(a0)        ;putx
  1539.     move.w    d1,2(a0)    ;puty
  1540.     bra    putsprite
  1541. doit3:
  1542.     move.l    #bdiscsp0,a0
  1543.     move.w    d2,(a0)        ;putx
  1544.     move.w    d1,2(a0)    ;puty
  1545.     bra    putsprite
  1546.  
  1547.  
  1548. doitb:
  1549.     subq.w    #6,d2
  1550.     cmpi.w    #425,6(a0)
  1551.     blt    doit2b
  1552.     move.l    #sdiscsp2,a0
  1553.     move.w    d2,(a0)        ;putx
  1554.     move.w    d1,2(a0)    ;puty
  1555.     bra    putsprite
  1556. doit2b:
  1557.     cmpi.w    #325,6(a0)
  1558.     blt    doit3b
  1559.     move.l    #sdiscsp1,a0
  1560.     move.w    d2,(a0)        ;putx
  1561.     move.w    d1,2(a0)    ;puty
  1562.     bra    putsprite
  1563. doit3b:
  1564.     move.l    #sdiscsp0,a0
  1565.     move.w    d2,(a0)        ;putx
  1566.     move.w    d1,2(a0)    ;puty
  1567.     bra    putsprite
  1568.  
  1569. bdiscsp0:
  1570.     dc.w    0,0    ;x,y
  1571.     dc.w    3,0    ;height,width
  1572.     dc.w    144    ;add to sc
  1573.     dc.l    bdisc0
  1574. bdiscsp1:
  1575.     dc.w    0,0    ;x,y
  1576.     dc.w    2,0    ;height,width
  1577.     dc.w    144    ;add to sc
  1578.     dc.l    bdisc1
  1579. bdiscsp2:
  1580.     dc.w    0,0    ;x,y
  1581.     dc.w    2,0    ;height,width
  1582.     dc.w    144    ;add to sc
  1583.     dc.l    bdisc2
  1584.  
  1585. sdiscsp0:
  1586.     dc.w    0,0    ;x,y
  1587.     dc.w    3,0    ;height,width
  1588.     dc.w    144    ;add to sc
  1589.     dc.l    sdisc0
  1590. sdiscsp1:
  1591.     dc.w    0,0    ;x,y
  1592.     dc.w    2,0    ;height,width
  1593.     dc.w    144    ;add to sc
  1594.     dc.l    sdisc1
  1595. sdiscsp2:
  1596.     dc.w    0,0    ;x,y
  1597.     dc.w    2,0    ;height,width
  1598.     dc.w    144    ;add to sc
  1599.     dc.l    sdisc2
  1600. mymansp:
  1601.     dc.w    0,0    ;x,y
  1602.     dc.w    38,1    ;height,width
  1603.     dc.w    136    ;add to sc
  1604.     dc.l    mymantemp
  1605.  
  1606.  
  1607. spblock:
  1608.     blk.w    50,0
  1609. let1c:    blk.w    1,0
  1610. let2c:    blk.w    1,0
  1611. let3c:    blk.w    1,0
  1612. let4c:    blk.w    1,0
  1613. let5c:    blk.w    1,0
  1614. let6c:    blk.w    1,0
  1615. let7c:    blk.w    1,0
  1616.  
  1617. ********************************
  1618. joydir:
  1619.     tst.b    joyport1
  1620.     beq    jdback
  1621.     move.b    joyport1,d0
  1622.     btst    #7,d0
  1623.     beq    northa
  1624.     move.w    #1,firebutton
  1625.     bclr    #7,d0
  1626.     bra    north
  1627. northa:    move.w    #-1,firebutton
  1628. north:    cmpi.b    #1,d0
  1629.     bne    neast
  1630.     add.w    #zamount,mymanz
  1631.     rts
  1632. neast:    cmpi.b    #9,d0
  1633.     bne    east
  1634.     add.w    #xamount,mymanx
  1635.     add.w    #zamount,mymanz
  1636.     rts
  1637. east:    cmpi.b    #8,d0
  1638.     bne    seast
  1639.     add.w    #xamount,mymanx
  1640.     rts
  1641. seast:    cmpi.b    #10,d0
  1642.     bne    south
  1643.     add.w    #xamount,mymanx
  1644.     sub.w    #zamount,mymanz
  1645.     rts
  1646.  
  1647. south:    cmpi.b    #2,d0
  1648.     bne    swest
  1649.     sub.w    #zamount,mymanz
  1650.     rts
  1651. swest:    cmpi.b    #6,d0
  1652.     bne    west
  1653.     sub.w    #xamount,mymanx
  1654.     sub.w    #zamount,mymanz
  1655.     rts
  1656. west:    cmpi.b    #4,d0
  1657.     bne    nwest
  1658.     sub.w    #xamount,mymanx
  1659.     rts
  1660. nwest:    cmpi.b    #5,d0
  1661.     bne    jdback
  1662.     sub.w    #xamount,mymanx
  1663.     add.w    #zamount,mymanz
  1664.     rts
  1665. jdback:
  1666.     rts
  1667.  
  1668. minusvel:    blk.w    1,0
  1669. plusvel:    blk.w    1,0
  1670. myx:    blk.w    1,0
  1671. myy:    blk.w    1,0
  1672. myxvel:    blk.w    1,0
  1673. myyvel:    blk.w    1,0
  1674. firebutton:    blk.w    1,-1
  1675. *******************************
  1676. *gtemp:    blk.w    5000,0
  1677. *gmask:    blk.w    5000,0
  1678. *****************************************
  1679. *    set up joystick handler        *
  1680. *****************************************
  1681. joystuff:
  1682. init_joy:
  1683.     move.w    #$14,-(sp)
  1684.     move.w    #4,-(sp)
  1685.     move.w    #3,-(sp)
  1686.     trap    #13
  1687.     addq.l    #6,sp
  1688.  
  1689.     move.w    #$11,-(sp)
  1690.     move.w    #4,-(sp)
  1691.     move.w    #3,-(sp)
  1692.     trap    #13
  1693.     addq.l    #6,sp
  1694.  
  1695.     move.w    #34,-(sp)
  1696.     trap    #14
  1697.     addq.l    #2,sp
  1698.     move.l    d0,a0
  1699.     adda.l    #24,a0
  1700.     move.l    (a0),old_packh        ;save the old handler
  1701.     move.l    #joy_packet,(a0)    ;put in mine
  1702.     rts
  1703. *****************************************    
  1704. *    this is the joy pak handler    *
  1705. *****************************************
  1706. joy_packet:
  1707.     movem.l    a0/a1,-(sp)
  1708.     lea    joyport0,a1
  1709.     move.b    1(a0),(a1)
  1710.     move.b    2(a0),1(a1)
  1711.     movem.l    (sp)+,a0/a1
  1712.     rts
  1713.  
  1714. joyport0:    blk.b    1,0
  1715. joyport1:    blk.b    1,0
  1716.     even
  1717.  
  1718. res_mouse:
  1719.     move.w    #34,-(sp)
  1720.     trap    #14
  1721.     addq.l    #2,sp
  1722.     move.l    d0,a0
  1723.     adda.l    #24,a0
  1724.     move.l    old_packh,(a0)
  1725.  
  1726. rs2:    move.w    #128,-(sp)
  1727.     move.w    #4,-(sp)
  1728.     move.w    #3,-(sp)
  1729.     trap    #13
  1730.     addq.l    #6,sp
  1731.  
  1732.     move.w    #1,-(sp)
  1733.     move.w    #4,-(sp)
  1734.     move.w    #3,-(sp)
  1735.     trap    #13
  1736.     addq.l    #6,sp
  1737.     rts
  1738.  
  1739. old_packh:    blk.l    1,0
  1740. *************************************************
  1741. prestuff:
  1742.     move.w    #0,d7
  1743. *    move.l    #myship,origptr
  1744. *    move.l    #myshipbuffer,imageptr
  1745.     move.w    #0,offset
  1746. ps1:
  1747.     move.w    #1,width
  1748.     move.w    #15,height
  1749.     jsr    pshiftimage    
  1750.     addq.w    #1,offset
  1751.     add.l    #240,imageptr
  1752.     addq.w    #1,d7
  1753.     cmpi.w    #15,offset
  1754.     ble    ps1
  1755.  
  1756.     move.w    #0,d7
  1757. *    move.l    #myshipmask,maskptr
  1758. *    move.l    #myshipbuffer,imageptr
  1759.     move.w    #0,offset
  1760. psm1:
  1761.     move.w    #1,width
  1762.     move.w    #15,height
  1763.     bsr    pmakemask    
  1764.     addq.w    #1,offset
  1765.     add.l    #240,imageptr
  1766.     add.l    #120,maskptr
  1767.     cmpi.w    #15,offset
  1768.     ble    psm1
  1769.  
  1770.  
  1771. *****************************************
  1772. *    height- height            *
  1773. *    width                *
  1774. *    offset                *
  1775. *    origptr                *
  1776. *    imageptr            *
  1777. *****************************************
  1778.  
  1779. pshiftimage:
  1780.         move.w  height,d1        ;height in d1
  1781.         move.w  offset,d2       ;offset to d2
  1782.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  1783.         subq.w  #1,width        ;width - 1 = width if count starts at zero
  1784.         move.l  origptr,a0      ;object pointer to a0
  1785.         move.l  imageptr,a1     ;image pointer to a1
  1786. psi1:   move.w  width,d0        ;width in d0
  1787.         clr.l   (a1)            ;for each line, the first word of the
  1788.         clr.l   4(a1)           ;image must be cleared
  1789. psi0:    clr.l   d4              ;make sure that the top halves of these
  1790.         clr.l   d5              ;registers are zeroed out
  1791.         clr.l   d6
  1792.         clr.l   d7
  1793.         move.w  (a0)+,d4        ;load in one word (four planes)
  1794.         move.w  (a0)+,d5        ;to be rotated
  1795.         move.w  (a0)+,d6
  1796.         move.w  (a0)+,d7
  1797.         ror.l   d2,d4           ;rotate all planes by the offset(d2)
  1798.         ror.l   d2,d5
  1799.         ror.l   d2,d6
  1800.         ror.l   d2,d7
  1801.         or.w    d4,(a1)+        ;add low order bits to the high order bits
  1802.         or.w    d5,(a1)+        ;stored by move instructions farther
  1803.         or.w    d6,(a1)+        ;down in this routine
  1804.         or.w    d7,(a1)+
  1805.         swap    d4              ;move high order bits into lower halves
  1806.         swap    d5              ;of the registers
  1807.         swap    d6
  1808.         swap    d7
  1809.         move.w  d4,(a1)         ;save the high orders bits to be ORed
  1810.         move.w  d5,2(a1)        ;in the loop (do not increment a1 because
  1811.         move.w  d6,4(a1)        ;the ORs in the loop must function on
  1812.         move.w  d7,6(a1)        ;the same addresses as these moves.
  1813.         dbf     d0,psi0          ;repeat width times
  1814.         addq.l  #8,a1           ;new line, move to next word( * 4 planes = 8)
  1815.         dbf     d1,psi1          ;repeat height times
  1816.         rts                     ;done
  1817.  
  1818. pmakemask:
  1819.         move.w  height,d1        ;height in d1
  1820.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  1821.         move.l  imageptr,a0        ;image pointer to a0
  1822.         move.l  maskptr,a1       ;mask pointer to a1
  1823. pmm1:    move.w  width,d0        ;width in d0
  1824. pmm0:    move.w  (a0)+,d2        ;load first plane of bit image in d2
  1825.         or.w    (a0)+,d2        ;OR it with the 3 other planes
  1826.         or.w    (a0)+,d2
  1827.         or.w    (a0)+,d2
  1828.         move.w  d2,d3           ;store inverse mask in d3 (temporary)
  1829.         swap    d2              ;move inverse mask to top half of register
  1830.         move.w  d3,d2           ;and also in bottom half
  1831.         eor.l   #-1,d2          ;mask no longer inverse
  1832.         move.l  d2,(a1)+        ;store mask in buffer
  1833.         dbf     d0,pmm0          ;repeat 'width' times
  1834.         dbf     d1,pmm1          ;repeat 'height' times
  1835.         rts                     ;done
  1836. **************************************************
  1837. *    routine to draw image of prerotated
  1838. *    sprite
  1839. *    must load width,height,screenloc,imageptr,maskptr
  1840. pdrawimage:
  1841.         move.w  height,d1        ;height to d1
  1842.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  1843.         move.l  imageptr,a1       ;image pointer to a1
  1844.         move.l  maskptr,a2       ;mask pointer to a2
  1845.         move.l  screenloc,a3       ;screen buffer pointer to a3
  1846. pdi1:    move.w  width,d0        ;width to d0
  1847.         move.l  screenloc,a0        ;absolute screen address to a0
  1848. pdi0:    move.l  (a2)+,d3        ;load mask data into d3
  1849.         move.l  (a1)+,d6        ;load screen image into d6 and d7
  1850.         move.l  (a1)+,d7        ;2 words each covers all 4 planes
  1851.         move.l  (a3)+,d4        ;do the same for the background
  1852.         move.l  (a3)+,d5        ;in d4 and d5 (from buffer, not screen)
  1853.         and.l   d3,d4           ;mask background
  1854.         and.l   d3,d5
  1855.         or.l    d6,d4           ;copy image onto background
  1856.         or.l    d7,d5           ;giving final image on top of background
  1857.         move.l  d4,(a0)+        ;copy final image into screen memory
  1858.         move.l  d5,(a0)+
  1859.         dbf     d0,pdi0          ;repeat for 'width' times
  1860.         add.l   #160,screenloc      ;move to next screen line
  1861.     add.l    #144,a3
  1862.         dbf     d1,pdi1          ;repeat 'height' times
  1863.         rts                     ;done
  1864.  
  1865. shadow:
  1866.     tst.w    shad
  1867.     bmi    sback
  1868.     move.w    height,d1
  1869.     subq.w    #1,d1
  1870.     move.l    screenloc,a0
  1871.     move.l    maskptr,a1
  1872.     add.l    #1592,a0
  1873. sd:
  1874.     move.l    (a1)+,d0
  1875.     and.l    d0,(a0)+
  1876.     and.l    d0,(a0)+
  1877.     move.l    (a1)+,d0
  1878.     and.l    d0,(a0)+
  1879.     and.l    d0,(a0)+
  1880.     add.l    #144,a0
  1881.     dbf    d1,sd
  1882.     move.w    #-1,shad
  1883.     rts
  1884. sback:    
  1885.     move.w    #1,shad
  1886.     rts
  1887.  
  1888. shad:    blk.w    1,0
  1889. height:    blk.w    1,0
  1890. width:    blk.w    1,0
  1891. screenloc:    blk.l    1,0
  1892. imageptr:    blk.l    1,0
  1893. maskptr:    blk.l    1,0
  1894. ****************************************
  1895. keyboard:
  1896.         move.w  #$ff,-(sp)
  1897.         move.w  #6,-(sp)
  1898.         trap    #1
  1899.         addq.l  #4,sp
  1900.         tst.l   d0
  1901.         beq     keyback
  1902.         swap    d0
  1903. quit:   cmpi.w  #$10,d0
  1904.         bne     space
  1905.         bra     gem
  1906. space:
  1907.     cmpi.w    #$39,d0
  1908.     bne    keyback
  1909.     bra    pause
  1910.     
  1911. keyback:rts
  1912. *****************************
  1913. pause:  
  1914.         move.w  #$ff,-(sp)
  1915.         move.w  #6,-(sp)
  1916.         trap    #1
  1917.         addq.l  #4,sp
  1918.         tst.l   d0
  1919.         beq     pause
  1920.         swap    d0
  1921.         cmpi.w  #$1e,d0
  1922.         bne     keyback 
  1923.         bsr     gkey
  1924.         cmpi.w  #$32,d0
  1925.         bne     keyback
  1926.         bsr     gkey
  1927.         cmpi.w  #$1e,d0
  1928.         bne     keyback
  1929.         bsr     gkey
  1930.         cmpi.w  #$31,d0
  1931.         bne     keyback
  1932.         bsr     gkey
  1933.         cmpi.w  #$20,d0
  1934.         bne     keyback
  1935.         bsr     gkey
  1936.         cmpi.w  #$1e,d0
  1937.         bne     keyback
  1938. *        bra     tmode
  1939.  
  1940. gkey:
  1941.         move.w  #$ff,-(sp)
  1942.         move.w  #6,-(sp)
  1943.         trap    #1
  1944.         addq.l  #4,sp
  1945.         tst.l   d0
  1946.         beq     gkey
  1947.         swap    d0
  1948.         rts
  1949.  
  1950. *********************************************************
  1951. *    New sprite routine                *
  1952. *    New version give ad of sprite structure in A0    *
  1953. *********************************************************
  1954. putsprite:
  1955.     move.w    (a0),d2        ;get x
  1956.     move.w    d2,d0
  1957.     move.w    2(a0),d1    ;get y
  1958.     and.w    #15,d2        ;get last 4 bits=offset
  1959.     move.l    hiden,a6
  1960.     lsl.w    #5,d1        ;*128
  1961.     add.w    d1,a6
  1962.     lsl.w    #2,d1
  1963.     add.w    d1,a6        ;=*160 gives line add
  1964.     and.w    #$fff0,d0    ;word
  1965.     lsr.w    #1,d0
  1966.     add.w    d0,a6        ;a6 has actual screen address
  1967.  
  1968. *************CODE TO ROTATE A SPRITE IMAGE***********************
  1969. shiftimages:
  1970.         move.w  4(a0),d1        ;height in d1
  1971.         move.l  10(a0),a1        ;object pointer to a0
  1972.         move.l  #gtemp,a2       ;image pointer to a1
  1973. ssi1:
  1974.         move.w  6(a0),d0           ;width - 1 = width if count starts at zero
  1975.         clr.l   (a2)            ;for each line, the first word of the
  1976.         clr.l   4(a2)           ;image must be cleared
  1977. ssi0:    
  1978.     moveq    #0,d4        ;make sure that the top halves of these
  1979.     moveq    #0,d5        ;registers are zeroed out
  1980.     moveq    #0,d6        ;registers are zeroed out
  1981.     moveq    #0,d7        ;registers are zeroed out
  1982.         move.w  (a1)+,d4        ;load in one word (four planes)
  1983.         move.w  (a1)+,d5        ;to be rotated
  1984.         move.w  (a1)+,d6
  1985.         move.w  (a1)+,d7
  1986.         ror.l   d2,d4           ;rotate all planes by the offset(d2)
  1987.         ror.l   d2,d5
  1988.         ror.l   d2,d6
  1989.         ror.l   d2,d7
  1990.         or.w    d4,(a2)+        ;add low order bits to the high order bits
  1991.         or.w    d5,(a2)+        ;stored by move instructions farther
  1992.         or.w    d6,(a2)+        ;down in this routine
  1993.         or.w    d7,(a2)+
  1994.         swap    d4              ;move high order bits into lower halves
  1995.         swap    d5              ;of the registers
  1996.         swap    d6
  1997.         swap    d7
  1998.         move.w  d4,(a2)         ;save the high orders bits to be ORed
  1999.         move.w  d5,2(a2)        ;in the loop (do not increment a1 because
  2000.         move.w  d6,4(a2)        ;the ORs in the loop must function on
  2001.         move.w  d7,6(a2)        ;the same addresses as these moves.
  2002.         dbf     d0,ssi0          ;repeat width times
  2003.         addq.l  #8,a2           ;new line, move to next word( * 4 planes = 8)
  2004.         dbf     d1,ssi1          ;repeat height times
  2005.  
  2006. smake_mask:
  2007.     move.w  4(a0),d1    ;height in d1
  2008.     move.l  #gtemp,a1    ;image pointer to a0
  2009.     move.l  #gmask,a2    ;mask pointer to a1
  2010. smm1:
  2011.     move.w  6(a0),d0    ;width in d0
  2012.     addq.w    #1,d0
  2013. smm0:    move.w  (a1)+,d2        ;load first plane of bit image in d2
  2014.         or.w    (a1)+,d2        ;OR it with the 3 other planes
  2015.         or.w    (a1)+,d2
  2016.         or.w    (a1)+,d2
  2017.         move.w  d2,d3           ;store inverse mask in d3 (temporary)
  2018.         swap    d2              ;move inverse mask to top half of register
  2019.         move.w  d3,d2           ;and also in bottom half
  2020.         eor.l   #-1,d2          ;mask no longer inverse
  2021.         move.l  d2,(a2)+        ;store mask in buffer
  2022.         dbf     d0,smm0          ;repeat 'width' times
  2023.         dbf     d1,smm1          ;repeat 'height' times
  2024.  
  2025. *********code to put sprite on screen********************
  2026. sdraw:
  2027.     move.w  4(a0),d1    ;height to d1
  2028.     move.l  #gtemp,a1    ;image pointer to a1
  2029.     move.l  #gmask,a2    ;mask pointer to a2
  2030.     move.l  a6,a3        ;screen buffer pointer to a3
  2031. sdi1:    move.w  6(a0),d0    ;width to d0
  2032.     addq.w    #1,d0
  2033.     move.l  a6,a5        ;absolute screen address to a0
  2034. sdi0:    move.l  (a2)+,d3        ;load mask data into d3
  2035.         move.l  (a1)+,d6        ;load screen image into d6 and d7
  2036.         move.l  (a1)+,d7        ;2 words each covers all 4 planes
  2037.         move.l  (a3)+,d4    ;do the same for the background
  2038.         move.l  (a3)+,d5        ;in d4 and d5 (from buffer, not screen)
  2039.         and.l   d3,d4           ;mask background
  2040.         and.l   d3,d5
  2041.         or.l    d6,d4           ;copy image onto background
  2042.         or.l    d7,d5           ;giving final image on top of background
  2043.         move.l  d4,(a5)+        ;copy final image into screen memory
  2044.         move.l  d5,(a5)+
  2045.         dbf     d0,sdi0        ;repeat for 'width' times
  2046.         addi.l    #160,a6        ;move to next screen line
  2047.         add.w      8(a0),a3
  2048.         dbf     d1,sdi1        ;repeat 'height' times
  2049.     rts
  2050. ************code to determine  x offset *****************
  2051. *               and absolute screen address             *
  2052. *               parameters to pass on stack as follows  *
  2053. *               1-      x of sprite                     *
  2054. *               2-      y of sprite                     *
  2055. *               3-      screen address                  *
  2056. *       paremeters returned are x offset in d0          *
  2057. *       absolute screen address in d2                   *
  2058. *********************************************************
  2059. shipsp:
  2060. calc:
  2061.         clr.l   d0
  2062.         move.w  pblock,d0       ;put x value in d0
  2063.         divu    #16,d0          ;divide by 16 leaves word boundry in d0
  2064.         move.w  pblock+2,d1     ;put y value in d1
  2065.         mulu    #160,d1         ;gives offset in words of line
  2066.         move.w  d0,d3
  2067.         mulu    #8,d3
  2068.         add     d3,d1           ;gives word to poke sprite
  2069.         move.l  pblock+16,d2    ;put screen address in d2
  2070.         add     d1,d2           ;gives actual screen address for sprite
  2071.         move.l  d2,pblock+20
  2072.         asr.l   #8,d0
  2073.         asr.l   #8,d0           ;leaves x offset in d0          
  2074.         move.w  d0,pblock+24
  2075.  
  2076.  
  2077. *************CODE TO ROTATE A SPRITE IMAGE***********************
  2078. *       parameters to be passed on the stack in order are       *       
  2079. *       1-      x offset from start of word                     *
  2080. *       2-      address of place to put shifted image(tempsp)   *
  2081. *       3-      address of sprite data                          *
  2082. *       4-      height of object in pixels                      *
  2083. *       5-      width of object in words - 1                    *
  2084. *****************************************************************
  2085. shiftimage:
  2086.         move.w  pblock+4,d1        ;height in d1
  2087.         move.w  pblock+24,d2       ;offset to d2
  2088.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  2089.         subq.w  #1,pblock+6        ;width - 1 = width if count starts at zero
  2090.         move.l  pblock+8,a0        ;object pointer to a0
  2091.         move.l  pblock+12,a1       ;image pointer to a1
  2092. si1:    move.w  pblock+6,d0        ;width in d0
  2093.         clr.l   (a1)            ;for each line, the first word of the
  2094.         clr.l   4(a1)           ;image must be cleared
  2095. si0:    clr.l   d4              ;make sure that the top halves of these
  2096.         clr.l   d5              ;registers are zeroed out
  2097.         clr.l   d6
  2098.         clr.l   d7
  2099.         move.w  (a0)+,d4        ;load in one word (four planes)
  2100.         move.w  (a0)+,d5        ;to be rotated
  2101.         move.w  (a0)+,d6
  2102.         move.w  (a0)+,d7
  2103.         ror.l   d2,d4           ;rotate all planes by the offset(d2)
  2104.         ror.l   d2,d5
  2105.         ror.l   d2,d6
  2106.         ror.l   d2,d7
  2107.         or.w    d4,(a1)+        ;add low order bits to the high order bits
  2108.         or.w    d5,(a1)+        ;stored by move instructions farther
  2109.         or.w    d6,(a1)+        ;down in this routine
  2110.         or.w    d7,(a1)+
  2111.         swap    d4              ;move high order bits into lower halves
  2112.         swap    d5              ;of the registers
  2113.         swap    d6
  2114.         swap    d7
  2115.         move.w  d4,(a1)         ;save the high orders bits to be ORed
  2116.         move.w  d5,2(a1)        ;in the loop (do not increment a1 because
  2117.         move.w  d6,4(a1)        ;the ORs in the loop must function on
  2118.         move.w  d7,6(a1)        ;the same addresses as these moves.
  2119.         dbf     d0,si0          ;repeat width times
  2120.         addq.l  #8,a1           ;new line, move to next word( * 4 planes = 8)
  2121.         dbf     d1,si1          ;repeat height times
  2122.         addi.w  #1,pblock+6
  2123. make_mask:
  2124.         move.w  pblock+4,d1        ;height in d1
  2125.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  2126.         move.l  pblock+12,a0        ;image pointer to a0
  2127.         move.l  pblock+38,a1       ;mask pointer to a1
  2128. mm1:    move.w  pblock+6,d0        ;width in d0
  2129. mm0:    move.w  (a0)+,d2        ;load first plane of bit image in d2
  2130.         or.w    (a0)+,d2        ;OR it with the 3 other planes
  2131.         or.w    (a0)+,d2
  2132.         or.w    (a0)+,d2
  2133.         move.w  d2,d3           ;store inverse mask in d3 (temporary)
  2134.         swap    d2              ;move inverse mask to top half of register
  2135.         move.w  d3,d2           ;and also in bottom half
  2136.         eor.l   #-1,d2          ;mask no longer inverse
  2137.         move.l  d2,(a1)+        ;store mask in buffer
  2138.         dbf     d0,mm0          ;repeat 'width' times
  2139.         dbf     d1,mm1          ;repeat 'height' times
  2140.  
  2141. draw:
  2142.         move.w  pblock+4,d1     ;height to d1
  2143.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  2144.         move.l  pblock+12,a1    ;image pointer to a1
  2145.         move.l  pblock+38,a2    ;mask pointer to a2
  2146.         move.l  pblock+20,a3    ;screen buffer pointer to a3
  2147. di1:    move.w  pblock+6,d0     ;width to d0
  2148.         move.l  pblock+20,a0    ;absolute screen address to a0
  2149. di0:    move.l  (a2)+,d3        ;load mask data into d3
  2150.         move.l  (a1)+,d6        ;load screen image into d6 and d7
  2151.         move.l  (a1)+,d7        ;2 words each covers all 4 planes
  2152.         move.l  (a3)+,d4        ;do the same for the background
  2153.         move.l  (a3)+,d5        ;in d4 and d5 (from buffer, not screen)
  2154.         and.l   d3,d4           ;mask background
  2155.         and.l   d3,d5
  2156.         or.l    d6,d4           ;copy image onto background
  2157.         or.l    d7,d5           ;giving final image on top of background
  2158.         move.l  d4,(a0)+        ;copy final image into screen memory
  2159.         move.l  d5,(a0)+
  2160.         dbf     d0,di0          ;repeat for 'width' times
  2161.         add.l   #160,pblock+20  ;move to next screen line
  2162.         add.w   pblock+46,a3
  2163.         dbf     d1,di1          ;repeat 'height' times
  2164.     rts
  2165. ***********************************
  2166. printscore:
  2167. *    tst.b    numsflag
  2168. *    bmi    noput
  2169.     move.w    #0,numwhere
  2170.     move.w    score,number
  2171.     bsr    prtnum
  2172. *    subq.b    #1,numsflag
  2173. *    rts
  2174. noput:
  2175.     move.b    #-1,numsflag
  2176. printships:
  2177. *    tst.b    shipsflag
  2178. *    bmi    noputs
  2179.     move.w    #2560,numwhere
  2180.     move.w    ships,number
  2181.     bsr    prtnum
  2182. *    subq.b    #1,shipsflag
  2183.     rts
  2184. noputs:
  2185.     move.b    #-1,numsflag
  2186.     rts
  2187.  
  2188. emancnt:    blk.w    1,0
  2189. numwhere:    blk.w    1,0
  2190. numsflag:    blk.b    1,0
  2191. shipsflag:    blk.b    1,0
  2192. levelflag:    blk.b    1,0
  2193. even
  2194. **********************************************
  2195. clearquick:
  2196.     move.l    screen3,a0
  2197.     move.l    hiden,a1
  2198.     addi.l    #7200,a0
  2199.     addi.l    #7200,a1
  2200.     move.w    #154,d0        ;154
  2201. clloop:
  2202.     move.l    (a0)+,(a1)+
  2203.     move.l    (a0)+,(a1)+
  2204.     move.l    (a0)+,(a1)+
  2205.     move.l    (a0)+,(a1)+
  2206.     move.l    (a0)+,(a1)+
  2207.     move.l    (a0)+,(a1)+
  2208.     move.l    (a0)+,(a1)+
  2209.     move.l    (a0)+,(a1)+
  2210.     move.l    (a0)+,(a1)+
  2211.     move.l    (a0)+,(a1)+
  2212.     move.l    (a0)+,(a1)+
  2213.     move.l    (a0)+,(a1)+
  2214.     move.l    (a0)+,(a1)+
  2215.     move.l    (a0)+,(a1)+
  2216.     move.l    (a0)+,(a1)+
  2217.     move.l    (a0)+,(a1)+
  2218.     move.l    (a0)+,(a1)+
  2219.     move.l    (a0)+,(a1)+
  2220.     move.l    (a0)+,(a1)+
  2221.     move.l    (a0)+,(a1)+
  2222.     move.l    (a0)+,(a1)+
  2223.     move.l    (a0)+,(a1)+
  2224.     move.l    (a0)+,(a1)+
  2225.     move.l    (a0)+,(a1)+
  2226.     move.l    (a0)+,(a1)+
  2227.     move.l    (a0)+,(a1)+
  2228.     move.l    (a0)+,(a1)+
  2229.     move.l    (a0)+,(a1)+
  2230.     move.l    (a0)+,(a1)+
  2231.     move.l    (a0)+,(a1)+
  2232.     move.l    (a0)+,(a1)+
  2233.     move.l    (a0)+,(a1)+
  2234.     move.l    (a0)+,(a1)+
  2235.     move.l    (a0)+,(a1)+
  2236.     move.l    (a0)+,(a1)+
  2237.     move.l    (a0)+,(a1)+
  2238.     move.l    (a0)+,(a1)+
  2239.     move.l    (a0)+,(a1)+
  2240.     move.l    (a0)+,(a1)+
  2241.     move.l    (a0)+,(a1)+
  2242.     dbf    d0,clloop
  2243.     rts
  2244.  
  2245. **************************************************************************
  2246.  
  2247. *               RETURN TO GEM
  2248.  
  2249. gem:
  2250.     move.w    #$0777,$ff8240
  2251. *    move.b    oldieb,ieb
  2252. *    move.b    oldiea,iea
  2253. *    move.b    oldima,ima
  2254. *    move.l    oldkeyvec,key_vec
  2255. *    move.l    oldhblvec,hbl_vec
  2256. *    move.l    oldvblvec,vbl_vec
  2257.  
  2258.  
  2259.     move.w    #0,$452
  2260.     move.l    oldvbl1,a0
  2261.     move.l    #0,(a0)
  2262.     move.w    #1,$452
  2263.  
  2264. *    jsr    res_mouse
  2265.     move.w  #34,-(sp)
  2266.         trap    #14
  2267.         addq.l  #2,sp
  2268.         move.l  d0,a0
  2269.     move.l    oldmouse,16(a0)
  2270.  
  2271.     jsr    rs2
  2272.  
  2273.         move.b  #7,$484
  2274.  
  2275.  
  2276.         move.w  ressave,-(sp)
  2277.         move.l  screen1,-(sp)
  2278.         move.l  screen1,-(sp)
  2279.         move.w  #5,-(sp)
  2280.         trap    #14
  2281.         addi.l  #12,sp
  2282.         
  2283.  
  2284.         move.l  spv_sp,-(SP)    ;Back to user mode
  2285.         move.w  #$20,-(SP)
  2286.         trap    #1
  2287.         addq.l  #6,(SP)
  2288.  
  2289. illegal
  2290.         CLR.W   -(SP)           ;RETURN TO GEM
  2291.    
  2292.         TRAP    #1
  2293.  
  2294. spv_sp: blk.l   1               ;supervisor SP store
  2295. ressave:    blk.w    1,0
  2296.  
  2297. beamer:
  2298.     move.l    #$ff8205,a0
  2299.     move.l    #0,d0
  2300.     move.b    (a0),d0
  2301.     asl.l    #8,d0
  2302.     adda.w    #2,a0
  2303.     move.b    (a0),d0
  2304.     asl.l    #8,d0
  2305.     adda.w    #2,a0
  2306.     move.b    (a0),d0
  2307.     rts
  2308. flip_scr:
  2309.     move.l    seen,d1
  2310.     move.l    d1,d2
  2311.     add.l    #10000,d1
  2312.     add.l    #16000,d2
  2313. skloop:
  2314.     move.l    #$ff8205,a0
  2315.     moveq    #0,d0
  2316.     move.b    (a0),d0
  2317.     asl.l    #8,d0
  2318.     adda.w    #2,a0
  2319.     move.b    (a0),d0
  2320.     asl.l    #8,d0
  2321.     adda.w    #2,a0
  2322.     move.b    (a0),d0
  2323. *    bsr    beamer
  2324.     cmp.l    d1,d0
  2325.     blt    skloop
  2326.     cmp.l    d2,d0
  2327.     bgt    skloop
  2328.  
  2329.     jsr    clearquick
  2330.         move.l  seen,A6
  2331.         move.l  hiden,seen
  2332.         move.l  A6,hiden
  2333.         move.l  sytable,A6
  2334.         move.l  ytable,sytable
  2335.         move.l  A6,ytable
  2336. *       rts
  2337. df:     move.w  #-1,-(sp)
  2338.         move.l  seen,-(sp)
  2339.         move.l  hiden,-(sp)
  2340.         move.w  #5,-(sp)
  2341.         trap    #14
  2342.         addi.l  #12,sp  
  2343. *    move.w    #37,-(sp)
  2344. *    trap    #14
  2345. *    addq.l    #2,sp
  2346.         rts
  2347. ************************************************************
  2348. flip2:
  2349.         move.l  seen,A6
  2350.         move.l  hiden,seen
  2351.         move.l  A6,hiden
  2352.         move.l  sytable,A6
  2353.         move.l  ytable,sytable
  2354.         move.l  A6,ytable
  2355. *       rts
  2356. df2:     move.w  #-1,-(sp)
  2357.         move.l  seen,-(sp)
  2358.         move.l  hiden,-(sp)
  2359.         move.w  #5,-(sp)
  2360.         trap    #14
  2361.         addi.l  #12,sp  
  2362.     move.w    #37,-(sp)
  2363.     trap    #14
  2364.     addq.l    #2,sp
  2365.     bsr    clearquick
  2366.         rts
  2367.  
  2368. ********************************************
  2369. * Atari ST hi-speed plotting subroutine    *
  2370. ********************************************
  2371. * For Low-resolution mode only           *
  2372. ********************************************
  2373. **************************************
  2374. * INITIALIZE THE PLOTTING ROUTINE:   *
  2375. * BUILDS PLOT ADDRESS TABLE (YTABLE) *
  2376. * FOR FAST PLOTTING.                 *
  2377. *                                    *
  2378. * CALL WITH:                         *
  2379. * pinit(SCREENADDRESS)               *
  2380. **************************************
  2381. plotinit:
  2382. move.l seen,a0    ;screen addr in A0
  2383. move.b #200,d1     ;200 Y positions
  2384. move.l #ytable1,a1 ;y table address in A1
  2385.  
  2386. iloop:
  2387. move.l a0,(a1)+    ;move address to table
  2388. adda.w #160,a0     ;increment address
  2389. subq.b #1,d1       ;1 less y position
  2390. bne iloop          ;loop if there's more!
  2391.  
  2392. move.l hiden,a0    ;screen addr in A0
  2393. move.b #200,d1     ;200 Y positions
  2394. move.l #ytable2,a1 ;y table address in A1
  2395.  
  2396. iloop2:
  2397. move.l a0,(a1)+    ;move address to table
  2398. adda.w #160,a0     ;increment address
  2399. subq.b #1,d1       ;1 less y position
  2400. bne iloop2         ;loop if there's more!
  2401. *move.l    #ytable2,ytable
  2402. rts
  2403.  
  2404. pixelx:    blk.w    1,0
  2405. pixely:    blk.w    1,0
  2406. pixelcolor:
  2407.     blk.w    1,0
  2408. ytable1:    blk.l    200,0
  2409. ytable2:    blk.l    200,0
  2410. ytable:        blk.l    1,0
  2411. sytable:        blk.l    1,0
  2412.  
  2413. **************************************
  2414. * PLOT A PIXEL WITH MY ROUTINE       *
  2415. *                                    *
  2416. * CALL WITH:                         *
  2417. * myplot(X,Y,COLOR)                  *
  2418. **************************************
  2419. myplot:
  2420. movem.l    d0-d5/a0-a1,-(sp)
  2421. move.w pixelx,d0      ;x coordinate in D0
  2422. cmp.w #319,d0
  2423. bcc pltxit
  2424. cmpi.w    #0,d0
  2425. blt    pltxit
  2426. move.w d0,d3         ;duplicate in D3
  2427. andi.w #15,d3        ;mask off lower 4 bits
  2428. move.w pixely,d1      ;get y coordinate,
  2429. cmp.w #199,d1
  2430. bcc pltxit
  2431. lsl.w #2,d1          ;mult by 4 for index
  2432. move.w pixelcolor,d2      ;get color number
  2433.  
  2434. lsr.w     #1,d0             ;x coord / 2
  2435. and.w #$00f8,d0      ;strip lower 3 bits
  2436. move.w d0,a0        ;move x offset to A0
  2437. move.l ytable,a1   ;get y table addr
  2438. adda.l 0(a1,d1.w),a0 ;got final pixel addr!
  2439. cmpi.w    #15,d3
  2440. beq    singlepix
  2441. move.w #$c000,d4     ;set ON pixel mask
  2442. lsr.w d3,d4          ;shift right D3 times
  2443. move.l #$c000c000,d5 ;set OFF pixel mask
  2444. lsr.l d3,d5          ;shift right D3 times
  2445. eor.l #$ffffffff,d5  ;toggle all bits in D5
  2446. bra    myphere
  2447.  
  2448. singlepix:
  2449. move.w #$8000,d4     ;set ON pixel mask
  2450. lsr.w d3,d4          ;shift right D3 times
  2451. move.l #$80008000,d5 ;set OFF pixel mask
  2452. lsr.l d3,d5          ;shift right D3 times
  2453. eor.l #$ffffffff,d5  ;toggle all bits in D5
  2454. and.l d5,(a0)        ;turn off old pixel
  2455. and.l d5,4(a0)       ;(both longwords)
  2456.  
  2457. ******************************
  2458. * Now turn on the new pixel! *
  2459. ******************************
  2460.  
  2461. * BIT 1 *
  2462.  
  2463. btst #0,d2           ;set the bit?
  2464. beq bbit2             ;no!
  2465. or.w d4,(a0)         ;turn it on!
  2466.  
  2467. * BIT 2 *
  2468.  
  2469. bbit2:
  2470. btst #1,d2           ;set it?
  2471. beq bbit4             ;no!
  2472. or.w d4,2(a0)        ;turn it on!
  2473.  
  2474. * BIT 4 *
  2475.  
  2476. bbit4:
  2477. btst #2,d2           ;set bit?
  2478. beq bbit8             ;no!
  2479. or.w d4,4(a0)        ;turn it on!
  2480.  
  2481. * BIT 8 *
  2482.  
  2483. bbit8:
  2484. btst #3,d2           ;set bit?
  2485. beq mysec           ;no, exit.
  2486. or.w d4,6(a0)        ;turn it on!
  2487.  
  2488. mysec:
  2489. adda.l    #8,a0
  2490. move.w #$8000,d4     ;set ON pixel mask
  2491. *lsr.w d3,d4          ;shift right D3 times
  2492. move.l #$80008000,d5 ;set OFF pixel mask
  2493. *lsr.l d3,d5          ;shift right D3 times
  2494. eor.l #$ffffffff,d5  ;toggle all bits in D5
  2495. and.l d5,(a0)        ;turn off old pixel
  2496. and.l d5,4(a0)       ;(both longwords)
  2497.  
  2498. ******************************
  2499. *    Turn off old pixel!     *
  2500. ******************************
  2501. myphere:
  2502.  
  2503. and.l d5,(a0)        ;turn off old pixel
  2504. and.l d5,4(a0)       ;(both longwords)
  2505.  
  2506. ******************************
  2507. * Now turn on the new pixel! *
  2508. ******************************
  2509.  
  2510. * BIT 1 *
  2511.  
  2512. btst #0,d2           ;set the bit?
  2513. beq bit2             ;no!
  2514. or.w d4,(a0)         ;turn it on!
  2515.  
  2516. * BIT 2 *
  2517.  
  2518. bit2:
  2519. btst #1,d2           ;set it?
  2520. beq bit4             ;no!
  2521. or.w d4,2(a0)        ;turn it on!
  2522.  
  2523. * BIT 4 *
  2524.  
  2525. bit4:
  2526. btst #2,d2           ;set bit?
  2527. beq bit8             ;no!
  2528. or.w d4,4(a0)        ;turn it on!
  2529.  
  2530. * BIT 8 *
  2531.  
  2532. bit8:
  2533. btst #3,d2           ;set bit?
  2534. beq pltxit           ;no, exit.
  2535. or.w d4,6(a0)        ;turn it on!
  2536.  
  2537. pltxit:
  2538. movem.l    (sp)+,d0-d5/a0-a1
  2539.     rts                  ;bye!
  2540.  
  2541. **********************
  2542. * get low-rez pixel  *
  2543. * get0(scrnbase,x,y) *
  2544. **********************
  2545. *gets pixel in hiden screen
  2546.  
  2547. mygetpix:
  2548. move.l hiden,a1
  2549. clr.w d0        ;zero result register
  2550. move.w pixely,d3    ;get Y coordinate
  2551. and.l #$0000ffff,d3    ;mask off for multiply
  2552. mulu #160,d3        ;multiply by 160 (# of bytes per scan line)
  2553. adda.l d3,a1        ;add to screen base address
  2554. move.w pixelx,d1    ;get X coordinate
  2555. move.w d1,d2        ;duplicate it in D2
  2556. lsr.w #1,d1        ;divide it by 2
  2557. and.w #$00f8,d1        ;turn off lower 3 bits
  2558. adda.w d1,a1        ;add to screen address register
  2559.  
  2560. move.w (a1),d3        ;grab screen word
  2561. and.l #15,d2        ;mask X to 0-15
  2562. move.w #$8000,d1    ;set up bit mask
  2563. lsr.w d2,d1        ;shift bit mask 0-15 bits
  2564. and.w d1,d3        ;mask off bit 0
  2565. beq bit0b        ;bit's off, go get next color bit
  2566. move.w #1,d0        ;turn on bit 0 in result
  2567.  
  2568. bit0b:
  2569. move.w 2(a1),d3        ;get screen word for bit 1 of color
  2570. and.w d1,d3        ;get bit 1
  2571. beq bit0c        ;it's off, try bit 2
  2572. or.w #2,d0        ;turn on bit 1 in result
  2573.  
  2574. bit0c:
  2575. move.w 4(a1),d3        ;get screen word for bit 2
  2576. and.w d1,d3        ;get bit 2
  2577. beq bit0d        ;it's off, try bit 3
  2578. or.w #4,d0        ;turn on bit 2 in result
  2579.  
  2580. bit0d:
  2581. move.w 6(a1),d3        ;get word for bit 3
  2582. and.w d1,d3        ;get bit 3
  2583. beq getx0        ;it's off!
  2584. or.w #8,d0        ;turn on bit 3 in result
  2585.  
  2586. getx0:
  2587. rts
  2588. *************************************************
  2589. linea:  dc.w    $a000
  2590.         move.l  a0,linepar
  2591.         move.l  8(a0),intin
  2592.         move.l  12(a0),ptsin
  2593.         rts
  2594.  
  2595. *************************************************
  2596.  
  2597. ***********************fancy clear screen****************
  2598. clearsc:move.l  #99,d0
  2599.         move.l  screen,a0
  2600. cl1:    move.w  #159,d1
  2601. cl2:    move.w  #0,(a0)+
  2602.         dbf     d1,cl2
  2603.         addi.l  #160,a0
  2604.         dbf     d0,cl1
  2605.         move.w  #99,d0
  2606.         move.l  screen,a0
  2607.         addi.l  #160,a0
  2608. cl3:    move.w  #159,d1
  2609. cl4:    move.w  #0,(a0)+
  2610.         dbf     d1,cl4
  2611.         addi.l  #160,a0
  2612.         dbf     d0,cl3
  2613.         rts
  2614.  
  2615.  
  2616. cldel:  move.w  #3000,d2
  2617. cdel1:  nop
  2618.         dbf     d2,cdel1
  2619.         rts
  2620. ********************************
  2621. copyintoboth:
  2622.         move.l  screen3,a0
  2623.         move.l  screen1,a1
  2624.         move.w  #4000,d0
  2625. cib3:
  2626.         move.l  (a0)+,(a1)+
  2627.         move.l  (a0)+,(a1)+
  2628.         dbf     d0,cib3
  2629.  
  2630.         move.l  screen3,a0
  2631.         move.l  screen2,a1
  2632.         move.w  #4000,d0
  2633. cib:
  2634.         move.l  (a0)+,(a1)+
  2635.         move.l  (a0)+,(a1)+
  2636.         dbf     d0,cib
  2637.     rts
  2638. **********************routine to print a dec nuber*************
  2639. prtnum: 
  2640.     move.w    #0,times
  2641.         move.l  #0,d7
  2642.         move.w  number,d7
  2643.         andi.l  #$ffff,d7
  2644.         move.l  #line,a5
  2645.  
  2646. dodec:  move.l  d7,d6
  2647.         divu    #10,d6
  2648.         move.w  d6,d7
  2649.         swap    d6
  2650. *        addi.w  #16,d6
  2651.         move.b  d6,(a5)+
  2652.         cmpi.w  #0,d7
  2653.         bne     dodec
  2654.     
  2655. out:    cmpa.l  #line,a5
  2656.         beq     decback
  2657.         move.b  -(a5),d7
  2658.         andi.w  #$ff,d7
  2659.     lea    numbers,a0
  2660.     mulu    #40,d7
  2661.     add.w    d7,a0
  2662.     move.w    #9,d0
  2663.     move.l    hiden,a1
  2664.     adda.w    numwhere,a1
  2665. oloop:
  2666.     move.b    (a0)+,(a1)
  2667.     move.b    (a0)+,2(a1)
  2668.     move.b    (a0)+,4(a1)
  2669.     move.b    (a0)+,6(a1)
  2670.     add.l    #160,a1
  2671.     dbf    d0,oloop
  2672.     addq.w    #1,times
  2673.     cmpi.w    #2,times
  2674.     blt    oh
  2675.     move.w    #0,times
  2676.     addq.w    #6,numwhere
  2677. oh:    addq.w    #1,numwhere
  2678.     
  2679.     bra    out
  2680.     rts        
  2681. decback:
  2682.     rts
  2683. times:    blk.w    1,0
  2684.  
  2685. prtnum2: 
  2686.         move.l  #0,d7
  2687.         move.w  number,d7
  2688.         andi.l  #$ffff,d7
  2689.         move.l  #line,a5
  2690.  
  2691. dodec2:  move.l  d7,d6
  2692.         divu    #10,d6
  2693.         move.w  d6,d7
  2694.         swap    d6
  2695.         addi.w  #48,d6
  2696.         move.b  d6,(a5)+
  2697.         cmpi.w  #0,d7
  2698.         bne     dodec2
  2699.     
  2700. out2:
  2701.     cmpa.l  #line,a5
  2702.         beq     decback2
  2703.         move.b  -(a5),d7
  2704.         andi.w  #$ff,d7
  2705.         move.w  d7,-(sp)
  2706.         move.w  #2,-(sp)
  2707.         trap    #1
  2708.         addq.l  #4,sp
  2709.         bra     out2
  2710.  
  2711. decback2:
  2712.     rts
  2713. *************puts my mouse interupt in***************** 
  2714.  
  2715. mx:    blk.w    1,0
  2716. my:    blk.w    1,0
  2717. buttondat:    blk.w    1,0
  2718. mmin:    blk.w    1,0
  2719. mmax:    blk.w    1,0
  2720. mmin2:    blk.w    1,0
  2721. mmax2:    blk.w    1,0
  2722. ************get screen address***************
  2723. getscrn:move.w  #2,-(sp)
  2724.         trap    #14
  2725.         addq.l  #2,sp
  2726.         move.l  d0,screen
  2727.         move.l  d0,screen1
  2728.         move.l  d0,screen2
  2729.         subi.l  #$8000,screen2
  2730.         move.l  screen1,seen
  2731.         move.l  screen2,hiden
  2732.     move.l    screen2,screen3
  2733.     subi.l    #$8000,screen3
  2734.     move.l    #ytable2,ytable
  2735.     move.l    #ytable1,sytable
  2736.         rts
  2737.  
  2738. ************change colors****************
  2739. docolors:
  2740.     move.l temppal,-(sp)
  2741.         move.w #6,-(sp)
  2742.         trap #14
  2743.         addq.l #6,sp
  2744.         rts
  2745. ************change colors****************
  2746.  
  2747. darkcolors:
  2748.         move.l #palette2,-(sp)
  2749.         move.w #6,-(sp)
  2750.         trap #14
  2751.         addq.l #6,sp
  2752.         rts
  2753.  
  2754. *****************wait for a key*********************
  2755. wait:   move.w  $26e6,d0
  2756.         cmpi.w  #2,d0
  2757.         beq     wback
  2758.         bra     wait
  2759. wback:  rts
  2760. ***************turn mouse off***********************
  2761. mousof: dc.w    $a00a   
  2762.         rts
  2763.  
  2764. oldmouse:    blk.l    1,0
  2765. *************puts my mouse interupt in***************** 
  2766. putrout:move.w  #34,-(sp)
  2767.         trap    #14
  2768.         addq.l  #2,sp
  2769.         move.l  d0,a0
  2770.     move.l    16(a0),oldmouse
  2771.         move.l  #myrout,16(a0)
  2772.  
  2773. *    move.w    #$0202,-(sp)
  2774. *    move.w    #$b,-(sp)
  2775. *    move.w    #4,-(sp)
  2776. *    move.w    #3,-(sp)
  2777. *    trap    #13
  2778. *    addq    #8,sp
  2779.         rts
  2780. **************my ubeut mouse interupt*******************
  2781. myrout:
  2782.     movem.l    d0-d2/a0-a1,-(sp)
  2783.     moveq    #0,d0    
  2784.     move.b    (a0),d0
  2785.     cmpi.b    #$fa,d0
  2786.     bne    myr1
  2787.     move.w    #1,buttondat
  2788.     bra    myrxy
  2789. myr1:
  2790.     cmpi.b    #$f9,d0
  2791.     bne    myr2
  2792.     move.w    #2,buttondat
  2793.     bra    myrxy
  2794. myr2:
  2795.     cmpi.b    #$fb,d0
  2796.     bne    myr3
  2797.     move.w    #3,buttondat
  2798.     bra    myrxy
  2799. myr3:
  2800.     move.w    #0,buttondat
  2801.  
  2802. myrxy:
  2803.     moveq    #0,d0
  2804.     move.b    1(a0),d0
  2805.     ext.w    d0
  2806.     moveq    #0,d1
  2807.     move.b    2(a0),d1
  2808.     ext.w    d1
  2809.     add.w    d0,mx
  2810.     tst.w    d1
  2811.     beq    myr4
  2812.     bmi    myr5
  2813.     moveq    #1,d1
  2814.     bra    myr6
  2815. myr5:    moveq    #-1,d1
  2816. myr6:    subq.w    #1,ycounter
  2817.     bpl    myr4
  2818.     add.w    d1,my
  2819.     move.w    #50,ycounter
  2820. myr4:    move.w    mx,d0
  2821.     move.w    my,d1
  2822.     bsr    extra
  2823.     move.w    d0,mx
  2824.     move.w    d1,my
  2825.     movem.l    (sp)+,d0-d2/a0-a1
  2826.     rts
  2827.  
  2828. extra:  cmpi.w    mmin,d0
  2829.         bge    .S extra1
  2830.         move.w    mmax,d0
  2831.         bra    .S extra2
  2832. extra1: cmpi.w   mmax,d0
  2833.         ble    .S extra2
  2834.         move.w  mmin,d0
  2835. extra2:    cmpi.w  mmin2,d1
  2836.         bge    .S extra3
  2837.         move.w  mmin2,d1
  2838.         bra    extra4
  2839. extra3: cmpi.w   mmax2,d1
  2840.         ble    .S extra4
  2841.         move.w  mmax2,d1
  2842. extra4:
  2843.         rts
  2844.  
  2845. ycounter:    blk.w    1,0
  2846. *******************************************************************
  2847. ; SYSNOPSIS
  2848. ;    RandomSeed( SeedValue )
  2849. ;                   D0
  2850.  
  2851. randomseed:     ADD.L   D0,D1           ;user seed in d0 (d1 too)
  2852.                 MOVEM.L D0/D1,RND
  2853.  
  2854. ; drops through to the main random function (not user callable)
  2855.  
  2856. LongRnd:        MOVEM.L D2-D3,-(SP)     
  2857.                 MOVEM.L RND,D0/D1       ;D0=LSB's, D1=MSB's of random number
  2858.                 ANDI.B  #$0E,D0         ;ensure upper 59 bits are an...
  2859.                 ORI.B   #$20,D0         ;...odd binary number
  2860.                 MOVE.L  D0,D2
  2861.                 MOVE.L  D1,D3
  2862.                 ADD.L   D2,D2           ;accounts for 1 of 17 left shifts
  2863.                 ADDX.L  D3,D3           ;[D2/D3] = RND*2
  2864.                 ADD.L   D2,D0
  2865.                 ADDX.L  D3,D1           ;[D0/D1] = RND*3
  2866.                 SWAP    D3              ;shift [D2/D3] additional 16 times
  2867.                 SWAP    D2
  2868.                 MOVE.W  D2,D3
  2869.                 CLR.W   D2
  2870.                 ADD.L   D2,D0           ;add to [D0/D1]
  2871.                 ADDX.L  D3,D1
  2872.                 MOVEM.L D0/D1,RND       ;save for next time through
  2873.                 MOVE.L  D1,D0           ;most random part to D0
  2874.                 MOVEM.L (SP)+,D2-D3
  2875.                 RTS
  2876.  
  2877. ; SYSNOPSIS
  2878. ;    RndNum = Random( UpperLimit )
  2879. ;      D0                 D0
  2880.  
  2881. random:         MOVE.W  D2,-(SP)
  2882.                 MOVE.W  D0,D2           ;save upper limit
  2883.                 BEQ.S   r1              ;range of 0 returns 0 always
  2884.                 BSR.S   LongRnd         ;get a longword random number
  2885.                 CLR.W   D0              ;use upper word (it's most random)
  2886.                 SWAP    D0
  2887.                 ext.l   d0
  2888.                 DIVs    D2,D0           ;divide by range...
  2889.                 CLR.W   D0              ;...and use remainder for the value
  2890.                 SWAP    D0              ;result in D0.W
  2891. r1:             MOVE.W  (SP)+,D2
  2892.                 RTS
  2893.  
  2894. randomplus:     MOVE.W  D2,-(SP)
  2895.                 MOVE.W  D0,D2           ;save upper limit
  2896.                 BEQ.S   r2              ;range of 0 returns 0 always
  2897.                 BSR.S   LongRnd         ;get a longword random number
  2898.                 CLR.W   D0              ;use upper word (it's most random)
  2899.                 SWAP    D0
  2900.                 DIVu    D2,D0           ;divide by range...
  2901.                 CLR.W   D0              ;...and use remainder for the value
  2902.                 SWAP    D0              ;result in D0.W
  2903. r2:             MOVE.W  (SP)+,D2
  2904.                 RTS
  2905. *********************************************************
  2906. *       a brilliant routine courtesy of janko to        *
  2907. *       insert the vbi addresses in the jump table      *
  2908. *       lea address of routine in a0 do a jsr           *
  2909. *       putvbl and thats it!!!                          *
  2910. *********************************************************
  2911.  
  2912.  
  2913. putvbl: lea     $452,a1
  2914.         move.w  #1,(a1)
  2915.         moveq   #7,d1
  2916.         lea     $456,a1
  2917.         move.l  (a1),a1
  2918. vbl3:   subq.b  #1,d1
  2919.         cmpi.b  #0,d1
  2920.         beq.s   vbl4
  2921.         move.l  (a1)+,d0
  2922.         cmpi.l  #0,d0
  2923.         bne.S   vbl3
  2924.         suba.l  #4,a1
  2925.         move.l  a0,(a1)
  2926. vbl4:   rts
  2927.  
  2928.  
  2929. oldvbl1:    
  2930.     blk.l    1,0
  2931. oldvbl2:
  2932.     blk.l    1,0
  2933. oldvbl3:
  2934.     blk.l    1,0
  2935.  
  2936. *********************************************************
  2937. *       my routines for loading in the screens          *
  2938. *********************************************************
  2939. loadscr:move    #0,-(SP)        ;Open file
  2940.         move.l  filename,-(SP) ;Address of filename
  2941.         move    #$3D,-(SP)
  2942.         trap    #1              ;Get handle number in D0
  2943.         addq.l  #8,SP
  2944.                 
  2945.         move    D0,-(SP)        ;Save handle
  2946.  
  2947.         move.l  #dummy,-(SP)    ;load pallette into safe area
  2948.         move.l  #128,-(SP)       ;length to read in
  2949.         move    D0,-(SP)        ;Handle
  2950.         move    #$3F,-(SP)      ;bios number
  2951.         trap    #1              ;Read file in
  2952.         addi.l   #12,SP
  2953.         move    (sp),d0        
  2954.                
  2955.         move.l  screen3,-(SP)    ;load it straight onto screen
  2956.         move.l  #32000,-(SP)    ;length to read in
  2957.         move    D0,-(SP)        ;Handle
  2958.         move    #$3F,-(SP)      ;bios number
  2959.         trap    #1              ;Read file in
  2960.         addi.l   #12,SP
  2961.                 
  2962.         move    #$3E,-(SP)      ;Handle already on stack
  2963.         trap    #1              ;Close file
  2964.         addq.l  #4,SP
  2965.         rts
  2966.  
  2967. *********************************************************
  2968. *********************************************************
  2969. loadtitle:
  2970.     move    #0,-(SP)        ;Open file
  2971.         move.l  #filescreen3,-(SP) ;Address of filename
  2972.         move    #$3D,-(SP)
  2973.         trap    #1              ;Get handle number in D0
  2974.         addq.l  #8,SP
  2975.                 
  2976.         move    D0,-(SP)        ;Save handle
  2977.  
  2978.         move.l  #dummy,-(SP)    ;load pallette into safe area
  2979.         move.l  #128,-(SP)       ;length to read in
  2980.         move    D0,-(SP)        ;Handle
  2981.         move    #$3F,-(SP)      ;bios number
  2982.         trap    #1              ;Read file in
  2983.         addi.l   #12,SP
  2984.         move    (sp),d0        
  2985.                
  2986. *        move.l  screen4,-(SP)    ;load it straight onto screen
  2987.         move.l  #32000,-(SP)    ;length to read in
  2988.         move    D0,-(SP)        ;Handle
  2989.         move    #$3F,-(SP)      ;bios number
  2990.         trap    #1              ;Read file in
  2991.         addi.l   #12,SP
  2992.                 
  2993.         move    #$3E,-(SP)      ;Handle already on stack
  2994.         trap    #1              ;Close file
  2995.         addq.l  #4,SP
  2996.         rts
  2997.  
  2998. filescreen3:
  2999.     dc.b    'title.neo',0
  3000.     even
  3001. ******************************
  3002. *******************blocks for rotated sprites*************
  3003. gtemp:        blk.w    5000,0
  3004. gmask:        blk.w    5000,0
  3005. offset:        blk.w    1,0
  3006. origptr:    blk.l    1,0
  3007. screen3:    blk.l   1,0
  3008. pblock:     blk.l   50
  3009. screen:     blk.l   1
  3010. screen2:    blk.l   1
  3011. screen1:    blk.l   1
  3012. dummy:      blk.l   32
  3013. filename:       blk.l    1,0
  3014. filediscs:    dc.b    'disc3.neo',0  
  3015. even
  3016. line:        blk.b   10
  3017. number:     blk.w   1
  3018. even
  3019. ships:        blk.w    1,0
  3020. intin:      blk.l   1
  3021. ptsin:      blk.l   1
  3022. putpix:     equ     $a001
  3023. getpix:     equ     $a002
  3024. seen:       blk.l   1
  3025. hiden:      blk.l   1
  3026. palette2:
  3027.             dc.w    $0000,$0000,$0000
  3028.             dc.w    $0000,$0000,$0000
  3029.             dc.w    $0000,$0000,$0000
  3030.             dc.w    $0000,$0000,$0000
  3031.             dc.w    $0000,$0000,$0000
  3032.             dc.w    $0000
  3033. rnd:            blk.l   2,0
  3034. score:          blk.w   1,0
  3035. level:          blk.w   1,0
  3036. linepar:        blk.l   1,0
  3037. pulsecol:    blk.w    1,0
  3038.  
  3039. titlepalette:
  3040.     dc.w    $0000,$0777,$0555,$0333,$0007,$0005,$0004,$0477
  3041.     dc.w    $0366,$0244,$0570,$0460,$0340,$0700,$0600,$0700
  3042.  
  3043. palette1:
  3044.     dc.w    $0000,$0507,$0223,$0112,$0077,$0007,$0005,$0003
  3045.     dc.w    $0732,$0521,$0700,$0305,$0304,$0070,$0373,$0773
  3046.  
  3047. temppal:
  3048.     blk.l    1,0
  3049.  
  3050.  
  3051. mymantemp:
  3052.      dc.w    $0000,$0000,$000F,$0000,$0000,$0000,$0000,$0000
  3053.      dc.w    $000F,$0000,$001F,$0000,$0000,$0000,$8000,$0000
  3054.      dc.w    $0010,$000F,$001F,$0000,$8000,$0000,$8000,$0000
  3055.      dc.w    $0010,$000F,$001F,$0000,$8000,$0000,$8000,$0000
  3056.      dc.w    $0019,$001F,$001F,$0000,$8000,$8000,$8000,$0000
  3057.      dc.w    $000F,$000F,$000F,$0000,$0000,$0000,$0000,$0000
  3058.      dc.w    $003F,$0000,$003F,$0000,$C000,$0000,$C000,$0000
  3059.      dc.w    $00FF,$0000,$00FF,$0000,$F000,$0000,$F000,$0000
  3060.      dc.w    $01C0,$0036,$01FF,$0000,$3800,$C000,$F800,$0000
  3061.      dc.w    $0180,$006F,$01FF,$0000,$1800,$6000,$F800,$0000
  3062.      dc.w    $0100,$00EF,$01FF,$0000,$0800,$7000,$F800,$0000
  3063.      dc.w    $0100,$02FF,$01FF,$0200,$0800,$F400,$F800,$0400
  3064.      dc.w    $03C6,$0079,$027F,$0186,$3C00,$E000,$E400,$1800
  3065.      dc.w    $0240,$01FF,$03FF,$0000,$2400,$F800,$FC00,$0000
  3066.      dc.w    $04A0,$03B9,$07BF,$0000,$5200,$DC00,$DE00,$0000
  3067.      dc.w    $0530,$033F,$073F,$0000,$4200,$CC00,$CE00,$0000
  3068.      dc.w    $0F30,$073F,$0F3F,$0000,$CF00,$CE00,$CF00,$0000
  3069.      dc.w    $1230,$0E3F,$1E3F,$0000,$C480,$C700,$C780,$0000
  3070.      dc.w    $6C3F,$1C3F,$7C3F,$0000,$C360,$C380,$C3E0,$0000
  3071.      dc.w    $903F,$7000,$F03F,$0000,$C090,$00E0,$C0F0,$0000
  3072.      dc.w    $407F,$C000,$C07F,$0000,$E020,$0030,$E030,$0000
  3073.      dc.w    $005F,$0020,$007F,$0000,$A000,$4000,$E000,$0000
  3074.      dc.w    $00CF,$0070,$00FF,$0000,$3000,$E000,$F000,$0000
  3075.      dc.w    $00F6,$007F,$00FF,$0000,$F000,$E000,$F000,$0000
  3076.      dc.w    $0139,$00F9,$01F9,$0000,$C800,$F000,$F800,$0000
  3077.      dc.w    $0130,$00F0,$01F0,$0000,$C800,$F000,$F800,$0000
  3078.      dc.w    $0130,$00F0,$01F0,$0000,$C800,$F000,$F800,$0000
  3079.      dc.w    $0220,$01E0,$03E0,$0000,$4400,$7800,$7C00,$0000
  3080.      dc.w    $0260,$01E0,$03E0,$0000,$6400,$7800,$7C00,$0000
  3081.      dc.w    $04C0,$03C0,$07C0,$0000,$3200,$3C00,$3E00,$0000
  3082.      dc.w    $0080,$0780,$0780,$0000,$1000,$1E00,$1E00,$0000
  3083.      dc.w    $0080,$0780,$0780,$0000,$1000,$1E00,$1E00,$0000
  3084.      dc.w    $0180,$0780,$0780,$0000,$1800,$1E00,$1E00,$0000
  3085.      dc.w    $0100,$0700,$0700,$0000,$0800,$0E00,$0E00,$0000
  3086.      dc.w    $0100,$0700,$0700,$0000,$0800,$0E00,$0E00,$0000
  3087.      dc.w    $0200,$0600,$0600,$0000,$0400,$0600,$0600,$0000
  3088.      dc.w    $0A00,$0600,$0E00,$0000,$0500,$0600,$0700,$0000
  3089.      dc.w    $127F,$0E7F,$1E00,$0000,$E480,$E700,$0780,$0000
  3090.      dc.w    $FFFF,$FFFF,$3E00,$0000,$FFF0,$FFF0,$07C0,$0000
  3091.  
  3092.  
  3093. bdisc0:     dc.w    $0000,$0000,$0FF0,$0000,$0FF0,$0000,$3FFC,$0000
  3094.      dc.w    $0FF0,$0000,$3FFC,$0000,$0000,$0000,$0FF0,$0000
  3095. bdisc1:     dc.w    $0000,$0000,$03C0,$0000
  3096.      dc.w    $03C0,$0000,$0FF0,$0000,$0000,$0000,$03C0,$0000
  3097. bdisc2:     dc.w    $0000,$0000,$0100,$0000,$0100,$0000,$07C0,$0000
  3098.      dc.w    $0000,$0000,$0100,$0000
  3099.  
  3100. rdisc0:     dc.w    $0000,$0000,$0000,$0FF0,$0000,$0FF0,$0000,$3FFC
  3101.      dc.w    $0000,$0FF0,$0000,$3FFC,$0000,$0000,$0000,$0FF0
  3102. rdisc1:     dc.w    $0000,$0000,$0000,$03C0
  3103.      dc.w    $0000,$03C0,$0000,$0FF0,$0000,$0000,$0000,$03C0
  3104. rdisc2:     dc.w    $0000,$0000,$0000,$0100,$0000,$0100,$0000,$07C0
  3105.      dc.w    $0000,$0000,$0000,$0100
  3106.  
  3107.  
  3108. sdisc0:     dc.w    $0FF0,$0FF0,$0000,$0000,$3FFC,$3FFC,$0000,$0000
  3109.      dc.w    $3FFC,$3FFC,$0000,$0000,$0FF0,$0FF0,$0000,$0000
  3110. sdisc1:     dc.w    $03C0,$03C0,$0000,$0000
  3111.      dc.w    $0FF0,$0FF0,$0000,$0000,$03C0,$03C0,$0000,$0000
  3112. sdisc2:     dc.w    $0100,$0100,$0000,$0000,$07C0,$07C0,$0000,$0000
  3113.      dc.w    $0100,$0100,$0000,$0000
  3114.  
  3115.  
  3116. numbers:
  3117.      dc.b    $7F,$FF,$00,$00,$81,$01,$7E,$00
  3118.      dc.b    $9D,$21,$42,$00,$A5,$39,$42,$00
  3119.      dc.b    $A5,$39,$42,$00,$A5,$39,$42,$00
  3120.      dc.b    $A5,$39,$42,$00,$B9,$3D,$42,$00
  3121.      dc.b    $81,$01,$7E,$00,$FE,$01,$00,$00
  3122.      dc.b    $18,$FF,$00,$00,$28,$CF,$10,$00
  3123.      dc.b    $28,$CF,$10,$00,$28,$CF,$10,$00
  3124.      dc.b    $28,$CF,$10,$00,$28,$CF,$10,$00
  3125.      dc.b    $28,$CF,$10,$00,$28,$CF,$10,$00
  3126.      dc.b    $28,$CF,$10,$00,$30,$CF,$00,$00
  3127.      dc.b    $7F,$FF,$00,$00,$81,$01,$7E,$00
  3128.      dc.b    $FD,$01,$02,$00,$79,$FD,$02,$00
  3129.      dc.b    $81,$01,$7E,$00,$9E,$21,$40,$00
  3130.      dc.b    $A0,$3F,$40,$00,$BF,$3F,$40,$00
  3131.      dc.b    $81,$01,$7E,$00,$FE,$01,$00,$00
  3132.      dc.b    $7F,$FF,$00,$00,$81,$01,$7E,$00
  3133.      dc.b    $FD,$01,$02,$00,$39,$FD,$02,$00
  3134.      dc.b    $41,$81,$3E,$00,$7D,$81,$02,$00
  3135.      dc.b    $05,$F9,$02,$00,$79,$FD,$02,$00
  3136.      dc.b    $81,$01,$7E,$00,$FE,$01,$00,$00
  3137.      dc.b    $63,$FF,$00,$00,$A5,$39,$42,$00
  3138.      dc.b    $A5,$39,$42,$00,$B9,$3D,$42,$00
  3139.      dc.b    $81,$01,$7E,$00,$FD,$01,$02,$00
  3140.      dc.b    $05,$F9,$02,$00,$05,$F9,$02,$00
  3141.      dc.b    $05,$F9,$02,$00,$06,$F9,$00,$00
  3142.      dc.b    $7F,$FF,$00,$00,$81,$01,$7E,$00
  3143.      dc.b    $BE,$01,$40,$00,$BF,$3F,$40,$00
  3144.      dc.b    $81,$01,$7E,$00,$F9,$05,$02,$00
  3145.      dc.b    $05,$FD,$02,$00,$7D,$FD,$02,$00
  3146.      dc.b    $81,$01,$7E,$00,$FE,$01,$00,$00
  3147.      dc.b    $7F,$FF,$00,$00,$81,$01,$7E,$00
  3148.      dc.b    $BE,$01,$40,$00,$BF,$3F,$40,$00
  3149.      dc.b    $81,$01,$7E,$00,$9D,$21,$42,$00
  3150.      dc.b    $A5,$39,$42,$00,$B9,$3D,$42,$00
  3151.      dc.b    $81,$01,$7E,$00,$FE,$01,$00,$00
  3152.      dc.b    $7F,$FF,$00,$00,$81,$01,$7E,$00
  3153.      dc.b    $FD,$01,$02,$00,$05,$F9,$02,$00
  3154.      dc.b    $05,$F9,$02,$00,$05,$F9,$02,$00
  3155.      dc.b    $05,$F9,$02,$00,$05,$F9,$02,$00
  3156.      dc.b    $05,$F9,$02,$00,$06,$F9,$00,$00
  3157.      dc.b    $7F,$FF,$00,$00,$81,$01,$7E,$00
  3158.      dc.b    $9D,$21,$42,$00,$B9,$3D,$42,$00
  3159.      dc.b    $81,$01,$7E,$00,$9D,$21,$42,$00
  3160.      dc.b    $A5,$39,$42,$00,$B9,$3D,$42,$00
  3161.      dc.b    $81,$01,$7E,$00,$FE,$01,$00,$00
  3162.      dc.b    $7F,$FF,$00,$00,$81,$01,$7E,$00
  3163.      dc.b    $9D,$21,$42,$00,$B9,$3D,$42,$00
  3164.      dc.b    $81,$01,$7E,$00,$FD,$01,$02,$00
  3165.      dc.b    $05,$F9,$02,$00,$05,$F9,$02,$00
  3166.      dc.b    $05,$F9,$02,$00,$06,$F9,$00,$00
  3167.  
  3168. rsprite:
  3169.      dc.w    $0000,$0000,$FFF0,$0000,$0000,$0008,$9040,$0000
  3170.      dc.w    $0000,$0000,$9024,$0000,$0000,$0000,$9024,$0000
  3171.      dc.w    $0000,$0000,$9024,$0000,$0000,$0000,$9058,$0000
  3172.      dc.w    $4000,$0000,$9FE0,$4000,$6600,$0000,$9900,$6600
  3173.      dc.w    $6300,$0000,$9480,$6300,$0000,$0000,$9240,$6180
  3174.      dc.w    $0000,$0000,$9120,$60C0,$6060,$6060,$F0F0,$0000
  3175.      dc.w    $6030,$6030,$F078,$0000,$0000,$0000,$F03C,$0000
  3176.  
  3177. asprite:
  3178.      dc.w    $0000,$0010,$3FE0,$0000,$0008,$0000,$4840,$0000
  3179.      dc.w    $0000,$0000,$9024,$0000,$0000,$0000,$9024,$0000
  3180.      dc.w    $0000,$0000,$9024,$0000,$0000,$0000,$9024,$0000
  3181.      dc.w    $4008,$0000,$9024,$4008,$6018,$0000,$9FE4,$6018
  3182.      dc.w    $6018,$0000,$9024,$6018,$0000,$0000,$9024,$6018
  3183.      dc.w    $0000,$0000,$9024,$6018,$6018,$6018,$F03C,$0000
  3184.      dc.w    $6018,$6018,$F03C,$0000,$0000,$0000,$F03C,$0000
  3185.  
  3186. msprite:
  3187.      dc.w    $2000,$4000,$8007,$0000,$0000,$0000,$9009,$0000
  3188.      dc.w    $0000,$0000,$8811,$0000,$0000,$0000,$8421,$0000
  3189.      dc.w    $0000,$0000,$9249,$0000,$0000,$0000,$9999,$0000
  3190.      dc.w    $4242,$0000,$9429,$4242,$6186,$0000,$9249,$6186
  3191.      dc.w    $6006,$0000,$9189,$6006,$0000,$0000,$9009,$6006
  3192.      dc.w    $0000,$0000,$9009,$6006,$6006,$6006,$F00F,$0000
  3193.      dc.w    $6006,$6006,$F00F,$0000,$0000,$0000,$F00F,$0000
  3194.  
  3195. wsprite:
  3196.      dc.w    $0041,$0002,$F38C,$0000,$0000,$0001,$9248,$0000
  3197.      dc.w    $0000,$0000,$9249,$0000,$0000,$0000,$9249,$0000
  3198.      dc.w    $0002,$0000,$9249,$0002,$0086,$0000,$9249,$0086
  3199.      dc.w    $4186,$0000,$9249,$4186,$6180,$0000,$9249,$6186
  3200.      dc.w    $6000,$0000,$9249,$6186,$0006,$0006,$924F,$6180
  3201.      dc.w    $0186,$0186,$93CF,$6000,$6184,$6184,$F3CF,$0000
  3202.      dc.w    $6000,$6000,$F7DE,$0000,$0000,$0000,$FEF8,$0000
  3203.  
  3204. esprite:
  3205.      dc.w    $0004,$0008,$FFF0,$0000,$0000,$0000,$9000,$0000
  3206.      dc.w    $0000,$0000,$9000,$0000,$0000,$0000,$9000,$0000
  3207.      dc.w    $0000,$0000,$9000,$0000,$0000,$0000,$9000,$0000
  3208.      dc.w    $2010,$0020,$9FC0,$2000,$6000,$0000,$9000,$6000
  3209.      dc.w    $6000,$0000,$9000,$6000,$0000,$0000,$9000,$6000
  3210.      dc.w    $0000,$0000,$9000,$6000,$6000,$6000,$F000,$0000
  3211.      dc.w    $6000,$6000,$F000,$0000,$0000,$0000,$FFFC,$0000
  3212.  
  3213. even
  3214. *350
  3215. rampat:
  3216.  dc.w 161,022
  3217.  dc.w 160,022
  3218.  dc.w 159,022
  3219.  dc.w 158,022
  3220.  dc.w 157,022
  3221.  dc.w 156,022
  3222.  dc.w 154,022
  3223.  dc.w 152,022
  3224.  dc.w 150,022
  3225.  dc.w 149,022
  3226.  dc.w 147,022
  3227.  dc.w 146,022
  3228.  dc.w 144,022
  3229.  dc.w 142,022
  3230.  dc.w 140,022
  3231.  dc.w 139,022
  3232.  dc.w 137,022
  3233.  dc.w 136,022
  3234.  dc.w 134,022
  3235.  dc.w 132,022
  3236.  dc.w 131,021
  3237.  dc.w 129,020
  3238.  dc.w 127,020
  3239.  dc.w 126,019
  3240.  dc.w 124,018
  3241.  dc.w 122,017
  3242.  dc.w 121,016
  3243.  dc.w 119,015
  3244.  dc.w 118,014
  3245.  dc.w 117,013
  3246.  dc.w 116,012
  3247.  dc.w 116,011
  3248.  dc.w 116,010
  3249.  dc.w 116,009
  3250.  dc.w 116,008
  3251.  dc.w 117,007
  3252.  dc.w 118,006
  3253.  dc.w 118,005
  3254.  dc.w 120,004
  3255.  dc.w 121,003
  3256.  dc.w 122,002
  3257.  dc.w 123,001
  3258.  dc.w 125,001
  3259.  dc.w 126,000
  3260.  dc.w 127,000
  3261.  dc.w 128,000
  3262.  dc.w 129,000
  3263.  dc.w 130,000
  3264.  dc.w 131,000
  3265.  dc.w 132,000
  3266.  dc.w 133,000
  3267.  dc.w 134,000
  3268.  dc.w 135,001
  3269.  dc.w 135,002
  3270.  dc.w 136,003
  3271.  dc.w 137,004
  3272.  dc.w 138,005
  3273.  dc.w 138,007
  3274.  dc.w 138,009
  3275.  dc.w 138,010
  3276.  dc.w 138,011
  3277.  dc.w 138,012
  3278.  dc.w 138,013
  3279.  dc.w 138,014
  3280.  dc.w 137,015
  3281.  dc.w 135,016
  3282.  dc.w 133,017
  3283.  dc.w 132,017
  3284.  dc.w 131,017
  3285.  dc.w 129,017
  3286.  dc.w 127,017
  3287.  dc.w 126,017
  3288.  dc.w 124,017
  3289.  dc.w 123,017
  3290.  dc.w 122,017
  3291.  dc.w 121,017
  3292.  dc.w 121,016
  3293.  dc.w 120,016
  3294.  dc.w 120,014
  3295.  dc.w 120,013
  3296.  dc.w 120,011
  3297.  dc.w 120,010
  3298.  dc.w 120,008
  3299.  dc.w 121,007
  3300.  dc.w 122,006
  3301.  dc.w 123,005
  3302.  dc.w 124,004
  3303.  dc.w 126,003
  3304.  dc.w 127,002
  3305.  dc.w 129,001
  3306.  dc.w 131,000
  3307.  dc.w 133,000
  3308.  dc.w 135,000
  3309.  dc.w 138,000
  3310.  dc.w 140,000
  3311.  dc.w 142,000
  3312.  dc.w 144,000
  3313.  dc.w 146,000
  3314.  dc.w 148,000
  3315.  dc.w 150,000
  3316.  dc.w 151,000
  3317.  dc.w 154,000
  3318.  dc.w 156,000
  3319.  dc.w 159,000
  3320.  dc.w 161,000
  3321.  dc.w 164,000
  3322.  dc.w 166,000
  3323.  dc.w 168,000
  3324.  dc.w 171,000
  3325.  dc.w 173,000
  3326.  dc.w 175,000
  3327.  dc.w 178,000
  3328.  dc.w 180,000
  3329.  dc.w 183,000
  3330.  dc.w 186,000
  3331.  dc.w 188,000
  3332.  dc.w 190,000
  3333.  dc.w 192,000
  3334.  dc.w 194,000
  3335.  dc.w 197,000
  3336.  dc.w 200,000
  3337.  dc.w 202,000
  3338.  dc.w 204,000
  3339.  dc.w 207,000
  3340.  dc.w 210,000
  3341.  dc.w 212,000
  3342.  dc.w 215,000
  3343.  dc.w 217,000
  3344.  dc.w 219,000
  3345.  dc.w 221,000
  3346.  dc.w 223,000
  3347.  dc.w 225,000
  3348.  dc.w 226,000
  3349.  dc.w 228,000
  3350.  dc.w 230,000
  3351.  dc.w 231,000
  3352.  dc.w 234,000
  3353.  dc.w 236,000
  3354.  dc.w 238,000
  3355.  dc.w 240,000
  3356.  dc.w 242,000
  3357.  dc.w 243,000
  3358.  dc.w 245,000
  3359.  dc.w 246,000
  3360.  dc.w 248,000
  3361.  dc.w 250,000
  3362.  dc.w 251,000
  3363.  dc.w 253,000
  3364.  dc.w 254,000
  3365.  dc.w 256,000
  3366.  dc.w 258,000
  3367.  dc.w 259,000
  3368.  dc.w 261,000
  3369.  dc.w 263,000
  3370.  dc.w 265,000
  3371.  dc.w 266,000
  3372.  dc.w 268,000
  3373.  dc.w 270,001
  3374.  dc.w 272,001
  3375.  dc.w 273,001
  3376.  dc.w 274,001
  3377.  dc.w 276,002
  3378.  dc.w 277,002
  3379.  dc.w 278,003
  3380.  dc.w 279,003
  3381.  dc.w 280,004
  3382.  dc.w 280,005
  3383.  dc.w 280,006
  3384.  dc.w 281,007
  3385.  dc.w 281,008
  3386.  dc.w 282,009
  3387.  dc.w 282,011
  3388.  dc.w 282,012
  3389.  dc.w 282,013
  3390.  dc.w 282,015
  3391.  dc.w 282,016
  3392.  dc.w 282,017
  3393.  dc.w 282,018
  3394.  dc.w 281,019
  3395.  dc.w 281,020
  3396.  dc.w 280,021
  3397.  dc.w 279,022
  3398.  dc.w 278,022
  3399.  dc.w 276,022
  3400.  dc.w 274,022
  3401.  dc.w 272,022
  3402.  dc.w 270,022
  3403.  dc.w 268,022
  3404.  dc.w 267,022
  3405.  dc.w 265,022
  3406.  dc.w 263,022
  3407.  dc.w 262,022
  3408.  dc.w 261,020
  3409.  dc.w 260,019
  3410.  dc.w 259,018
  3411.  dc.w 259,016
  3412.  dc.w 259,015
  3413.  dc.w 259,014
  3414.  dc.w 259,012
  3415.  dc.w 259,011
  3416.  dc.w 259,010
  3417.  dc.w 259,009
  3418.  dc.w 260,008
  3419.  dc.w 261,007
  3420.  dc.w 262,006
  3421.  dc.w 263,005
  3422.  dc.w 264,004
  3423.  dc.w 265,003
  3424.  dc.w 266,003
  3425.  dc.w 267,002
  3426.  dc.w 268,002
  3427.  dc.w 269,002
  3428.  dc.w 270,002
  3429.  dc.w 272,002
  3430.  dc.w 274,002
  3431.  dc.w 275,002
  3432.  dc.w 276,002
  3433.  dc.w 277,003
  3434.  dc.w 278,003
  3435.  dc.w 278,004
  3436.  dc.w 279,005
  3437.  dc.w 279,007
  3438.  dc.w 280,007
  3439.  dc.w 280,009
  3440.  dc.w 280,011
  3441.  dc.w 280,012
  3442.  dc.w 280,013
  3443.  dc.w 280,014
  3444.  dc.w 279,015
  3445.  dc.w 279,016
  3446.  dc.w 279,017
  3447.  dc.w 278,018
  3448.  dc.w 277,019
  3449.  dc.w 275,020
  3450.  dc.w 274,021
  3451.  dc.w 273,022
  3452.  dc.w 272,022
  3453.  dc.w 271,022
  3454.  dc.w 270,022
  3455.  dc.w 269,022
  3456.  dc.w 267,022
  3457.  dc.w 266,022
  3458.  dc.w 265,022
  3459.  dc.w 263,022
  3460.  dc.w 262,022
  3461.  dc.w 261,022
  3462.  dc.w 259,022
  3463.  dc.w 258,022
  3464.  dc.w 257,022
  3465.  dc.w 256,022
  3466.  dc.w 255,022
  3467.  dc.w 254,022
  3468.  dc.w 253,022
  3469.  dc.w 252,022
  3470.  dc.w 251,022
  3471.  dc.w 250,022
  3472.  dc.w 249,022
  3473.  dc.w 248,022
  3474.  dc.w 247,022
  3475.  dc.w 246,022
  3476.  dc.w 245,022
  3477.  dc.w 244,022
  3478.  dc.w 243,022
  3479.  dc.w 242,022
  3480.  dc.w 241,022
  3481.  dc.w 240,022
  3482.  dc.w 239,022
  3483.  dc.w 238,022
  3484.  dc.w 237,022
  3485.  dc.w 236,022
  3486.  dc.w 235,022
  3487.  dc.w 234,022
  3488.  dc.w 233,022
  3489.  dc.w 232,022
  3490.  dc.w 231,022
  3491.  dc.w 230,022
  3492.  dc.w 229,022
  3493.  dc.w 228,022
  3494.  dc.w 227,022
  3495.  dc.w 226,022
  3496.  dc.w 225,022
  3497.  dc.w 224,022
  3498.  dc.w 223,022
  3499.  dc.w 222,022
  3500.  dc.w 221,022
  3501.  dc.w 220,022
  3502.  dc.w 219,022
  3503.  dc.w 218,022
  3504.  dc.w 217,022
  3505.  dc.w 216,022
  3506.  dc.w 215,022
  3507.  dc.w 214,022
  3508.  dc.w 213,022
  3509.  dc.w 212,022
  3510.  dc.w 211,022
  3511.  dc.w 210,022
  3512.  dc.w 209,022
  3513.  dc.w 208,022
  3514.  dc.w 207,022
  3515.  dc.w 206,022
  3516.  dc.w 205,022
  3517.  dc.w 204,022
  3518.  dc.w 203,022
  3519.  dc.w 202,022
  3520.  dc.w 201,022
  3521.  dc.w 200,022
  3522.  dc.w 199,022
  3523.  dc.w 198,022
  3524.  dc.w 197,022
  3525.  dc.w 196,022
  3526.  dc.w 195,022
  3527.  dc.w 194,022
  3528.  dc.w 193,022
  3529.  dc.w 192,022
  3530.  dc.w 191,022
  3531.  dc.w 190,022
  3532.  dc.w 189,022
  3533.  dc.w 188,022
  3534.  dc.w 187,022
  3535.  dc.w 186,022
  3536.  dc.w 185,022
  3537.  dc.w 184,022
  3538.  dc.w 183,022
  3539.  dc.w 182,022
  3540.  dc.w 181,022
  3541.  dc.w 180,022
  3542.  dc.w 179,022
  3543.  dc.w 178,022
  3544.  dc.w 177,022
  3545.  dc.w 176,022
  3546.  dc.w 175,022
  3547.  dc.w 174,022
  3548.  dc.w 173,022
  3549.  dc.w 172,022
  3550.  dc.w 171,022
  3551.  dc.w 170,022
  3552.  dc.w 169,022
  3553.  dc.w 168,022
  3554.  dc.w 167,022
  3555.  dc.w 166,022
  3556.  dc.w 165,022
  3557.  dc.w 164,022
  3558.  dc.w 163,022
  3559.  dc.w 162,022
  3560.  dc.w 161,022
  3561.  dc.w 160,022
  3562.  dc.w 159,022
  3563.  dc.w 158,022
  3564.  dc.w 157,022
  3565.  dc.w 156,022
  3566.  dc.w 175,022
  3567. ə